Jak to vůbec funguje
Základem jsou 2 textové soubory. Do prvního se ukládá seznam ip adres, které jsou momentálně online a do druhého časy poslední aktivity.
Obslužný PHP script je rozdělen na dvě hlavní části. První má na starosti aktualizaci seznamu ip adres a smazání neaktivních lidí (těch, kteří již na webu nejsou), další pouze přečte soubor se seznamem ip adres, spočítá je a výsledek zobrazí.
Kvůli lepší přehlednosti jsem každou z částí umístil do zvláštního souboru
pocitadlo.php - aktualizace seznamu ip adres a
ukaz.php - zobrazení počtu lidí, co jsou online.
Soubor: pocitadlo.php
<?php
// ip adresa
$ip = $_SERVER["REMOTE_ADDR"];
//soubory se seznamem ip adres a časů poslední aktivity
$soubor_ip = "ip.txt";
$soubor_cas = "cas.txt";
// doba po kterou bude uživatel online (15 minut)
$limit = 60*15;
// uložíme soubory do proměnných
$data_ip = file_get_contants($soubor_ip);
$data_cas = file_get_contants($soubor_cas);
// vytvoříme pole, oddělovací znak je zalomení řádku (\n)
$pole_ip = explode("\n",$data_ip);
$pole_cas = explode("\n",$data_cas);
// výstupní proměnné
$vystup_ip="$ip\n";
$vystup_cas=time()."\n";
// zkontrolujeme online uživatele a zmažeme ty kteří nebyli aktivní déle než 15 minut
foreach($pole_cas as $index => $cas){
if( ($cas!="") && ($cas>(time()-$limit)) && ($pole_ip[$index]!="$ip") ){
$vystup_ip.=$pole_ip[$index]."\n";
$vystup_cas.="$cas\n";
}
}
// zapíšeme výsledek do souborů
$fp_ip = fopen($soubor_ip,"w");
fwrite($fp_ip,$vystup_ip);
fclose($fp_ip);
$fp_cas = fopen($soubor_cas,"w");
fwrite($fp_cas,$vystup_cas);
fclose($fp_cas);
?>
Myslím, že k tomu neni moc co dodávat. Script si načte soubory do proměnných, vytvoří pole (každá ip je jeden objekt v poli) a aktualizuje poslední klik z mojí IP adresy. Poté následuje cyklus, který u všech ip adres zkontroluje čas poslední aktivity a pokud je starší než 15 minut, tak danou ip adresu vymaže. Úplně nakonec se uloží aktualizovaný seznam ip adres a časů aktivit zpátky do souborů, ze kterých byl načten.
Další krok je zobrazení počtu online uživatelů. To obstará tento script.
Soubor: ukaz.php
<?php
$soubor = "online/ip.txt";
// uložíme soubor do proměnné
$data = file_get_contents($soubor);
// vytvoříme pole
$pole = explode("\n",$data);
// spočítáme řádky v poli
$count = count($pole)-1;
// zobrazíme výsledek
echo $count;
?>
Jak jste si jistě všimli, je od celkového počtu odečtena jednička. Je to z toho důvodu, že seznam ip adres vždy končí zalomením řádku, nikdy ne ip adresou. Díky tomu má pole vždy o 1 prvek víc než je ve skutečnosti ip adres.
Oživení počítadla
K tomu, aby počítadlo fungovalo je potřeba do všech stránek přidat tento kód:
<?php include("pocitadlo.php"); ?>
Zobrazení na stránce
Jako poslední je potřeba někde na webu zobrazit výsledek celého našeho snažení. Obstará to tento kód:
<?php include("ukaz.php"); ?>
Tím by bylo počítadlo hotové. Celý script si ještě můžete stáhnout zde
|