Spolehlivé počítadlo přístupů

Jiří Kosek ml.

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>
Obr.: Stránka s počítadlem
Stránka s počítadlem
© Jiří Kosek 1999