[php] Serializacja, pliki, etc.
: wt lut 13, 2007 2:21 pm
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)
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)