Problémy s anketou

Vždy po nějakém čase se mi smažou data o hlasování v anketě a taky vzkazy v návštěvní knize. Uložena jsou pomocí php v txt souboru. Problém má víc lidí. Prosím poraďte.
možná tě to překvapí, ale máš chybu ve skriptu... tím jsem chtěl říct, že bez něj ti asi těžko poradíme
Vy jste ale rychlíci..
<?php
$souborip="anketa-ip.txt"; //soubor s ip adresami hlasujících
$soubor="hlasuj.txt"; //soubor s hlasy
$aktualni = $REMOTE_ADDR; //aktuální ip adresa


$otazka = "Jak se vám líbí tyto stránky?"; //Otázka
$odp = array("Výborný","Dobrý","Ujde","Hrůza"); //Odpovědi


//Kontrola existence souborů
if (!file_exists($souborip))
{
err ($souborip);
exit;
}
if (!file_exists($soubor))
{
err ($soubor);
exit;
}
//Konec kontroly

//Otevření a načtení hlasů
$data = fopen($soubor, "r");
$cti = fread($data, filesize($soubor)+10);
fclose($data);
list($a, $b, $c, $d) = explode( "Đ", $cti);

//Hlasování
if (isset($odpoved))
{
if (zjistiip($souborip, $aktualni))
{
if ($odpoved == "a") {$a++;}
elseif ($odpoved == "b") {$b++;}
elseif ($odpoved == "c") {$c++;}
elseif ($odpoved == "d") {$d++;}

$zapsat = "$a" . "Đ" . "$b" . "Đ" . "$c" . "Đ" . "$d" . "Đ";
$kam = fopen($soubor, "w");
fwrite($kam, $zapsat); //zapsání nového hlasu do souboru
fclose($kam);

$ipsoubor = fopen($souborip, "r"); //zapsání ip adresy odesílatele hlasu
$data = fread($ipsoubor, filesize($souborip)+10);
fclose($ipsoubor);

$write = $data.$aktualni."Đ";

$kam = fopen($souborip, "r+");
fwrite($kam,$write);
fclose($kam);

}
}


//Zobrazení výsledků
$celkem = $a+$b+$c+$d;
$lidi = $celkem;

if ($celkem == 0)
{
$celkem = "1";
$lidi="0";
}

$pr = $celkem/100;
$a = number_format($a/$pr,1);
$b = number_format($b/$pr,1);
$c = number_format($c/$pr,1);
$d = number_format($d/$pr,1);


$pismeno = array ("a","b","c","d");
$procenta = array ("$a","$b","$c","$d");
$kolik = "4";

echo "<table border='0' cellpadding='0' cellspacing='0' width='50px'>\n";
echo "<tr><td colspan='2' class='ank_to'><b>$otazka</b></td></tr>\n";

for ($i=0; $i<$kolik ;$i++ )
{

if (zjistiip($souborip, $aktualni))
{
echo "<tr><td colspan='2' class='ank_t'><a href=anketa.php?odpoved=$pismeno[$i]>$odp[$i]</a></td></tr>\n";
}
else
{
echo "<tr><td colspan='2' class='ank_t' >$odp[$i]</td></tr>\n";
}

echo "<tr><td bgcolor='#CCCCCC' width='85px'><img src='prouzek.bmp' height='8px' width='".(($procenta[$i])/1.2)."px'></td><td class='ank_t' width='10px'> $procenta[$i]%</td></tr>\n";
}




echo "<tr><td colspan='2' class='ank_to'>Celkem hlasovalo:<br><b>$lidi</b> lidí</td></tr></table>\n";



//Funkce pro vypsání chyby
function err ($soubor)
{
echo "<font color=red><b>Chyba!</b></font><br>Nelze nalézt soubor <b>$soubor</b>!\n";
}

//funkce pro zjištění ip adresy
function zjistiip($souborip, $ip)
{

$ipsoubor = fopen($souborip, "r");
$data = fread($ipsoubor, filesize($souborip)+10);
fclose($ipsoubor);
$ipadresy = explode("Đ",$data);

if (in_array($ip, $ipadresy))
{
return false; //Pokud již bylo z dané ip adresy hlasováno
}
else
{
return true; // pokud nebylo z dané ip hlasováno
}
} //konec funkce




?>
resilo se zde. hledej "flock".
nebo spis jenom pridej flock a bude to f pohode
co je to flock?
Jirka: funkce v php. vice viz manual php.
mno ja bych to radsi resil databazi je to jednodusi a rychlejsi!
tak jsem se díval a viděl. kám mám přidat flock()
ať žijou lamy
tak asi takhle?





//Otevření a načtení hlasů
$data = FOPEN($soubor, "r");
flock($soubor,LOCK_SH);
$cti = fread($data, filesize($soubor)+10);
FCLOSE($data);
LIST($a, $b, $c, $d) = explode( "Đ", $cti);
flock($soubor,LOCK_UN);
//Hlasování
IF (ISSET($odpoved))
{
IF (zjistiip($souborip, $aktualni))
{
IF ($odpoved == "a") {$a++;}
ELSEIF ($odpoved == "b") {$b++;}
ELSEIF ($odpoved == "c") {$c++;}
ELSEIF ($odpoved == "d") {$d++;}

$zapsat = "$a" . "Đ" . "$b" . "Đ" . "$c" . "Đ" . "$d" . "Đ";
$kam = FOPEN($soubor, "w");
flock($soubor,LOCK_EX);
FWRITE($kam, $zapsat); //zapsání nového hlasu do souboru
FCLOSE($kam);
flock($soubor,LOCK_SH);
$ipsoubor = FOPEN($souborip, "r"); //zapsání ip adresy odesílatele hlasu
flock($souborip,LOCK_EX);
$data = fread($ipsoubor, filesize($souborip)+10);
FCLOSE($ipsoubor);
flock($souborip,LOCK_SH);
$write = $data.$aktualni."Đ";
flock($souborip,LOCK_EX);
$kam = FOPEN($souborip, "r+");
flock($souborip,LOCK_SH);
FWRITE($kam,$write);
FCLOSE($kam);

}
}
asi takto:
if(!file_exists(soubor)) // soubor neexistuje
{ // otevreni pro cteni soubor pri jeho neexistenci nevytvori
$fp = fopen(soubor, 'w');
fclose($fp);
}
$fp = fopen(soubor, 'r+');
for($pokus = 0; $pokus < 10; $pokus++) // 10 pokusů na zápis po 100us
{
if (flock($fp, LOCK_EX)) // nastaveni zamku
{
// tady mame zamceno
// cteme soubor
ftruncate($fp, 0); rewind($fp); // smazeme soubor
// zapiseme data
flock($fp, LOCK_UN); // uvolneni zamku
break; // ukonceni cyklu pokusu o zapis
} // konec if (flock($fp, LOCK_EX))
usleep(100); // cekani na dalsi pokus o zapis
} // konec cyklu for pro pokusy o zapis
fclose($fp); // zavreni souboru

co to pouzivam, jeste se mi ten soubor nesmazal