Chyba ve scriptu?
6 příspěvků
Archiv diskusního fóra
Fórum je uzavřené a slouží pouze ke čtení. Některé informace mohou být zastaralé.
-
Mám udělané počítadlo přes textový soubor. Občas se ale stane, že se soubor vynuluje (naposled po 600). Je tato chyba ve skriptu nebo na WZ? Doufám, že i přes opakované používání stejných názvů pro proměnné to bude pochopitelné. NEJDE mi ale o zpřehlednění kódu, ale o TU chybu. <? $soubor = "counter.txt"; if(!file_exists($soubor)): $filename = fopen($soubor,"w"); fputs($filename, "0"); fclose($filename); endif; if(!isset($_COOKIE[CounterCookie])): //zjisti hodnotu pocitadla $zdroj = fopen($soubor,"r"); $value = fread($zdroj, filesize($soubor)); fclose($zdroj); //zvysi hodnotu pocitadla o 1 $zapis = fopen($soubor, "w"); $value = ($value + 1); fwrite($zapis,$value); fclose($zapis); clearstatcache (); //vymaze cacheovany filesize endif; $zdroj = fopen($soubor,"r"); $value = fread($zdroj, filesize($soubor)); fclose($zdroj); echo $value; ?> Předem díky
-
Ja bych rek, ze je to v pohode,... ale se souborama moc nedelam, takze na to moc nespolehej... Me se stavalo neco podobnyho... Nahraval jsem soubor (myslim, ze to byly styly) a jeste nez se stacil nahrat jsem se na tu stranku podival a trada, soubor se stylama byl prazdnej :)
-
A doplním, že cookie je vytvářena jiným skriptem (na začátku stránky a jen není-li už přítomna) a má časově omezenou platnost.
-
Non_E: >> Občas se ale stane, že se soubor vynuluje (naposled po 600). Je to způsobeno, že pokud se do souboru zapisuje ve stejnou dobu několikrát, data se prostě neuchovají a vymažou. Hledej zde v diskusi funkci flock() a taky v PHP manuálu: http://cz.php.net/manual/cs/function.flock.php
-
Diky, mrknu se na to
-
Ano, tak nějak. Pokud se sejdou dvě spuštění skriptu paralelně, jeden soubor otevře pro zápis a druhý teprve potom pro čtení, tak ten chudák co to zkouší číst najde nově založený prázdný soubor a pokouší se do něho zapsat první záznam. Mezitím sice první skript soubor uzavře se správným číslem, ale poté jej přepíše počáteční hodnotou ten skript spuštěný později. Řešení je několik: a) při otevření prázdného souboru počkat, až jej jiný skript uzavře b) pokud má soubor nulovou velikost, tak do něj nezapisovat data c) použít k sledování návštěvnosti databázi Straka