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)
[php] Serializacja, pliki, etc.
-
Salfunglandyare
- Nowy

- Posty: 88
- Rejestracja: śr sty 24, 2007 9:52 pm
- Lokalizacja: Kuj-Pom.
Re: [php] Serializacja, pliki, etc.
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.
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.
Re: [php] Serializacja, pliki, etc.
Główny plik. Strona ładowana jeden raz - sprawdzałem kiedy nikt inny nie korzystał ze strony.
-
Salfunglandyare
- Nowy

- Posty: 88
- Rejestracja: śr sty 24, 2007 9:52 pm
- Lokalizacja: Kuj-Pom.
Re: [php] Serializacja, pliki, etc.
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.
pzdr.
Re: [php] Serializacja, pliki, etc.
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.
Można dostać na stronę do 3 hitów w sekundę po pierwszym wejściu.
