Chtěl bych mít na svých stránkách počítadlo přístupů, které bude opravdu odpovídat počtu návštěv stránky. Pokud na stránku zařadím počítadlo jako obrázek, mohou být počty přístupů ovlivněny i z jiných stránek. Navíc se nezapočítávají přístupy z textových prohlížečů (Lynx) a z prohlížečů s vypnutými obrázky.
Hned z počátku musíme přiznat, že opravdu spolehlivý zdroj přesného počtu přístupů ke stránkám dnes neexistuje. Počítadla přístupů zařazovaná na stránky pomocí CGI-skriptu, který generuje obrázek s počtem přístupů, mají mnoho nevýhod a lze je napadnout z mnoha stran. Jejich velká výhoda spočívá v tom, že je lze zařadit na libovolnou stránku. Pokud si takové počítadlo chcete zařadit na stránku, obvykle získáte potřebné informace u vašeho poskytovatele připojení. Rovněž můžete využít veřejně přístupné počítadlo na adrese http://pocitadlo.pinknet.cz.
Asi nejspolehlivější metodou pro získání počtu přístupů, je analýza log-souborů na serveru. V těchto souborech jsou uloženy záznamy o všech stránkách poskytnutých serverem. Jediný problém je v tom, že některé stránky jsou uživatelům poskytnuty z vyrovnávacích pamětí proxy-serverů. Server nabízející danou stránku, pak o přístupu vůbec neví a statistika je zkreslená.
Problém s proxy-servery lze jednoduše vyřešit tím, že se zakáže
ukládání stránky do vyrovnávacích pamětí. Není to však zdaleka nejlepší
řešení, protože se tím zvednou nároky na přenosovou kapacitu
Internetu. Ukládání do vyrovnávacích pamětí lze zakázat pomocí HTTP
hlaviček Pragma
, Cache-Control
a
Expires
. Tak například hlavička Expires
obsahuje čas, do kdy je stránka platná. Pokud ho tedy nastavíme na čas
odeslání stránky, nebude stránka ukládána v paměti žádného
proxy-serveru. Pro nastavení hlavičky na správnou hodnotu můžeme ve
skriptovacím jazyku PHP na začátek stránky umístit příkaz
Header("Expires: " . GMDate("D, d M Y H:i:s") . " GMT");
Nyní máme připravenu půdu pro spolehlivé počítadlo. Stačí vytvořit krátký skript, který bude generovat počty přístupů a zařazovat je přímo do textu stránky -- počet přístupů bude vidět ve všech prohlížečích a bude odpovídat realitě, protože stránky nebudou nikdy načítány z vyrovnávací paměti proxy-serverů.
Náš skript bude ukládat počty přístupů ke každé stránce do zvláštního souboru. Při každém přístupu se ze souboru přečte aktuální počet přístupů, zvýší se o jedna, zobrazí se a zapíše zpět do souboru.
Dostáváme se tedy ke skriptu counter.php
:
<? function GetHits() { $datadir = "f:\\work\\counter\\"; // adresář pro datové soubory // na Unixu např. /var/counter $datafile = StrTR($GLOBALS["SCRIPT_NAME"], "./\\", "___"); // nahrazení nebezpečných znaků ze jména datového souboru $filename = $datadir.$datafile.".dat"; // kompletní cesta k datovému souboru if (File_Exists($filename)): // existuje datový soubor? $fp = @FOpen($filename, "r+"); // otevření souboru if (!$fp) return; $hits = FGetS($fp,10) + 1; // přečtení počtu přístupů Rewind($fp); // příprava souboru na zápis else: $fp = @FOpen($filename, "w"); // vytvoření dat. souboru if (!$fp) return; $hits = 1; // inicializace počtu přístupů endif; FPutS($fp, $hits); // zapsání nového počtu přístupů FClose($fp); // zavření datového souboru echo $hits; // vypsání počtu přístupů } GetHits(); ?>
Zařazení počítadla na stránku je velice jednoduché:
<?Header("Expires: " . GMDate("D, d M Y H:i:s") . " GMT")?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE>Stránka s počítadlem</TITLE> </HEAD> <BODY> <H1>Stránka s počítadlem</H1> <P>Jste <?require "counter.php"?>. návštěvník této stránky. </BODY> </HTML>