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é.

  1. 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
  2. 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 :)
  3. 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.
  4. 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
  5. Diky, mrknu se na to
  6. 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

← Zpět na všechna témata