[php] Serializacja, pliki, etc.

Języki, których efekty są wykonywane po stronie serwera. PHP, ASP czy CGI w połączeniu z bazami danych SQL dają niezwykłe możliwości budowy i zarządzania stron WWW. Tu zadajemy pytania oraz demonstrujemy kod, z którym mamy problem.
viraptor
Zaczyna działać
Zaczyna działać
Posty: 633
Rejestracja: pn cze 28, 2004 12:58 pm
Kontakt:

[php] Serializacja, pliki, etc.

Post autor: viraptor »

Hej
Mam problem z zapisem / odczytem zserializowanej tablicy do pliku. Mam założoną blokadę, plik wczytuję cały przez file_get_contents, zapisuję też za jednym razem i zamykam... A jednak po jednej wizycie jeden wpis potrafi pokazać się do 3 razy za jednym załadowaniem.

[php]<?php
$fp = fopen("linkslock.txt", "w+"); // standardowa blokada na cały zapis / odczyt
while(!flock($fp, LOCK_EX)); // dziwny opis na php.net - while na wszelki wypadek
$linksFile='links.txt';

$links=unserialize(file_get_contents($linksFile)); // całość od razu

if($links) {
foreach($links as $row) {
cokolwiek($row);
}

while(count($links)>9) // max 10 - 1 elementów
array_shift($links);
$links[]=array($_REQUEST['link'], $nowy_link); // dodaj nowy link

$fh = fopen($linksFile, 'w'); // zapisz zserializowaną tabelę
fwrite($fh, serialize($links));
fclose($fh);
}
}

flock($fp, LOCK_UN); // zdjęcie blokady
fclose($fp);
?>[/php]

Jakieś pomysły, czemu pojawiają się duplikaty? (tylko czasem - czasem 2-3 naraz)
Salfunglandyare
Nowy
Nowy
Posty: 88
Rejestracja: śr sty 24, 2007 9:52 pm
Lokalizacja: Kuj-Pom.

Re: [php] Serializacja, pliki, etc.

Post autor: Salfunglandyare »

Podejrzewam, że powyższy kod wykonywany jest wiele razy. Najprawdopodobniej też trzymasz ten kod w osobnym pliku, który jest include'owany w kilku miejscach lub przez kilka plików.
Jeśli się nie mylę zamiast include/require użyj include_once/require_once.

Możliwe też, że po prostu ktoś odświeżył stronę i to co masz w $_REQUEST['link'] zapisało się tyle samo razy ile strona była odświeżana.

pzdr.
viraptor
Zaczyna działać
Zaczyna działać
Posty: 633
Rejestracja: pn cze 28, 2004 12:58 pm
Kontakt:

Re: [php] Serializacja, pliki, etc.

Post autor: viraptor »

Główny plik. Strona ładowana jeden raz - sprawdzałem kiedy nikt inny nie korzystał ze strony.
Salfunglandyare
Nowy
Nowy
Posty: 88
Rejestracja: śr sty 24, 2007 9:52 pm
Lokalizacja: Kuj-Pom.

Re: [php] Serializacja, pliki, etc.

Post autor: Salfunglandyare »

Potestuj więc, daj jakieś echo, zobacz ile razy wypisze Ci na ekranie. Podaj też większą partię kodu, może gdzie indziej jest coś nie tak. Ten plik wydaje się być poprawny.

pzdr.
viraptor
Zaczyna działać
Zaczyna działać
Posty: 633
Rejestracja: pn cze 28, 2004 12:58 pm
Kontakt:

Re: [php] Serializacja, pliki, etc.

Post autor: viraptor »

No i jasne - uwaga na bota mediapartner-google - wchodzi na stronę zaraz po tym jak się dowie, że istnieje. Zapamiętuje też parametry z GET.
Można dostać na stronę do 3 hitów w sekundę po pierwszym wejściu.
ODPOWIEDZ