Strona 1 z 1

[php] Serializacja, pliki, etc.

: wt lut 13, 2007 2:21 pm
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)

Re: [php] Serializacja, pliki, etc.

: wt lut 13, 2007 9:32 pm
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.

Re: [php] Serializacja, pliki, etc.

: czw lut 15, 2007 7:44 am
autor: viraptor
Główny plik. Strona ładowana jeden raz - sprawdzałem kiedy nikt inny nie korzystał ze strony.

Re: [php] Serializacja, pliki, etc.

: czw lut 15, 2007 6:08 pm
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.

Re: [php] Serializacja, pliki, etc.

: sob lut 17, 2007 12:26 pm
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.