Autor | Zpráva | ||
---|---|---|---|
Jcas Profil * |
#1 · Zasláno: 17. 2. 2013, 20:48:36
Mám toto počítadlo. Funguje relativně dobře, ale asi co půl roku dojde k jeho vynulování.
Nevíte někdo, co to může být za chybu? ps. Tu zálohu na konci si dělám, abych v případě vynulování věděl stav návštěvníků. <?php $slozka = "./pocitadlo"; if((!file_exists("$slozka/data.txt")) || (!file_exists("$slozka/ip.txt"))) { die("Jeden z datových souborù nebyl nalezen."); } $ip = $_SERVER[REMOTE_ADDR]; $ban_ip = Array("81.0.202.2"); /* Zde lze vkládat IP adresy, které nebudou zapoèítávány do poèítadla (vhodné pro sluby mìøení dostupnosti). Napø.: $ban_ip = Array("127.0.0.1","82.202.0.2","192.56.87.3"); */ $adresy = explode("\n", file_get_contents("$slozka/ip.txt")); //pole s ip a s časem $radku = count($adresy); //vrátí počet prvků pole $cas = time(); //vrátí počet sekund od 1.1.1970 $online = 1; $plus = true; for($i = 0; $i < $radku; $i++) { $adresa = explode(":", $adresy[$i]); if(($ip == $adresa[0]) && ($cas < $adresa[1])) { $plus = false; } if(($ip != $adresa[0]) && ($cas < $adresa[1])) { $zapis .= $adresa[0].":".$adresa[1]."\n"; foreach($ban_ip as $adresa) { if($ip == $adresa) { $ban = 1; break; } } if($ban == 0) { $online++; } } } $cas = $cas + 600; $zapis .= $ip.":".$cas."\n"; $fp = fopen("$slozka/ip.txt", "w+"); //zapsání nové adresy fwrite($fp, $zapis); fclose($fp); $fp = fopen("$slozka/data.txt","r"); $data = fread($fp, filesize("$slozka/data.txt")); $data = unserialize($data); if($plus) { $ban = 0; foreach($ban_ip as $adresa) { if($ip == $adresa) { $ban = 1; break; } } if($ban == 0) { $data[celkem]++; $data[dnes]++; } } $den = date("w"); if($den != $data[den]) { $data[dnes] = 1; } $data[den] = $den; $celkem = $data[celkem]; $dnes = $data[dnes]; $data = serialize($data); fclose($fp); $fp = fopen("$slozka/data.txt", "w+"); fwrite($fp, $data); fclose($fp); echo "<table width=\"150\" rules=\"none\" border=\"1\" align=\"center\">"; echo "<tr bgcolor=\"silver\"><th colspan=\"2\"><strong>Návštěvy</strong></th></tr>"; echo "<tr><td>Celkem:</td> <td><strong>$celkem</strong></td></tr><tr><td>Dnes: </td><td><strong>$dnes</strong></td></tr><tr><td> Online:</td> <td><strong>$online</strong></td></tr>"; echo "</table>"; //Záloha - Pokud v ip.txt bude více než 10000 adres if($radku>10000) { $soubor = fopen("$slozka/zaloha.txt", "w"); fwrite($soubor, $celkem); fclose($soubor); $soubor2 = fopen("$slozka/ip.txt", "w"); fwrite($soubor2, $zapis); fclose($soubor2); } ?> |
||
Davex Profil |
#2 · Zasláno: 17. 2. 2013, 21:46:37
Jcas:
Když budou k souboru ip.txt přistupovat dva skripty spuštěné skoro současně, tak se může stát, že ho bude druhý běžící skript načítat v okamžiku, kdy ho ještě první běžící nestihl zapsat. Dalo by se to vyřešit zamykáním souborů pro exkluzivní přístup, ale raději doporučuji použít databázi, kde něco takového nehrozí. |
||
Časová prodleva: 11 let
|
0