Autor Zpráva
Jcas
Profil *
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 služby 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
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í.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0