Textové počítadlo
Chcete si vést počítadla návštěvnosti či kliknutí na odkaz? Pak si přečtěte následující řádky, kde se dozvíte základní postupy jak takovéto počítadla využít. Článek je svým obsahem vhodný spíše pro začátečníky v PHP.
V následujících větách bych vám chtěl ukázat jednoduchý způsob jak vést jednoduchou statistiku návštěvnosti vašich stránek nebo statistiku počtu kliknutí na odkaz. Následující skripty budou pracovat v prostředí PHP a k uchovávání dat budou používat souborů na disku. Celé počítadlo si vytvoříme jako jednoduchou funkci, kterou pak do svých skriptů můžete naincludovat.
První skript bude počítat přístupy na stránky a bude obsahovat dvě funkce. Jedna bude pricti() a druhá ukaz(). Oběma funkcím bude předávána hodnota identifikující stránku v proměnné $identifikator Proměnná bude obsahovat identifikátor stránky (počítadlo bude možné využít pro více stránek). Jelikož identifikátor bude zároveň názvem souboru na disku, bude nutné používat jen takové znaky, které soubor může obsahovat.
Nejdříve si probereme funkci pricti(). Tato funkce převezme název identifikátoru a pokusí se zjistit, zda potřebný soubor na disku existuje. Pokud ano, otevře jej pro čtení a zápis. Poté jej skript zamkne jako ochranu proti případným dalším přístupům k souboru. Poté načteme obsah souboru do proměnné a k takto získané proměnné přičteme jedničku. Nakonec se vrátíme na začátek souboru, zapíšeme do něj nový obsah upravené proměnné, odblokujeme soubor a zavřeme s ním spojení. Zde je kód skriptu:
function pricti($identifikator){
// cesta k souboru s počítadlem, doporučuji
// použít absolutní cestu !!!
$filename = "./counter/".$identifikator;
// pokud už soubor existuje, otevřeme jej pro čtení
// a zápis.
if (file_exists($filename)) {
$f = fopen($filename,"r+");
// zablokujeme pro čtení i zápis
flock($f,2);
// přečteme obsah souboru
$hits = fread($f,100000);
// přičteme jedničku $hits++;
// vrátíme ukazatel na začátek souboru
fseek($f,0);
}
// pokud soubor neexistuje, otevřeme jej pro zápis
else {
// bude to první přístup
$hits = 1;
// otevřeme soubor
$f = fopen($filename, "w");
// zablokujeme
flock($f,2);
}
// do souboru nyní vložíme obsah proměnné
// $hits, odblokujeme a zavřeme spojení se souborem.
fputs($f, $hits);
flock($f,3);
fclose($f);
}
Poznámka: je možné že na serveru s PHP3 nebude skript fungovat korektně. Je to dáno tím, že PHP3 ještě neumí správně interpretovat funkci flock(), takže pokud vám to bude dělat problémy, odstraňte řádky s touto funkcí. Pak ale musíte počítat s možností, že se při mnoha přístupech na stránku počítadlo smaže (více uživatelů přistupuje k souboru v jednu chvíli, různě jej čtou a zapisují do něj). Osobně jsem skript zkoušel na win i linux verzích PHP 3.0.14, PHP 4.0.4pl1 a vše je v naprostém pořádku.
Dalším funkce je ukaz(). Téhle funkci předáme identifikátor stránky stejně jako v předchozím příkladu. Skript se pak pokusí načíst obsah souboru do proměnné, kterou pak funkcí return vrátí jako výsledek funkce, se který můžeme naložit dle libosti. Opět použijeme zamčení souboru. Tentokráte nám bude stačit zablokovat přístup pro zápis, čtení souboru jinými uživateli nám vadit nebude.
function ukaz($identifikator){
// cesta k souboru s počítadlem, doporučuji
// použít absolutní cestu !!!
$filename = "./counter/".$identifikator;
// pokud soubor existuje, otevřeme jej pro čtení
if (file_exists($filename)) {
$f = Fopen($filename,"r");
// zablokujeme soubor proti případnému zápisu
flock($f,1);
// načteme obsah souboru
$hits = fread($f,100000);
// odblokujeme a zavřeme soubor
flock($f,3);
fclose($f);
}
else
{
// pokud soubor neexsituje bude v proměnné 0
$hits = 0;
}
// funkce vrátí obsah proměnné $hits
return $hits;
}
Dalším slíbeným tématem je počítání kliknutí na odkaz, takže si budete moci vést statistiku kliknutí třeba na reklamní ikonku, či počítat počet downloadovaných souborů. Pro tento účel si vytvoříme samostatný php skript, který do kterého naincludujeme předchozí funkce. Skript bude sloužit k vyhodnocení jemu předaných parametrů, přičtení kliknutí k patřičnému odkazu a následnému přesměrování na soubor. Řekněme že náš skript se bude jmenovat redir.php a budeme mu předávat proměnnou $co která bude (pro jednoduchost) obsahovat identifikátor odkazu a zároveň identifikátor souboru počítadla.
Zavoláte-li skript s patřičným parametrem (například: redir.php?co=1), tak skript nejdříve projede řadou podmínek. Pokud bude podmínka splněna, zavoláme funkci pricti() s parametrem $co, která přičte patřičné počítadlo. Poté do proměnné $redir přiřadíme url adresu odkazu, který parametr skriptu zastupuje. Nakonec nás skript pomocí funkce header() přesměruje na požadovanou stránku či soubor. Zde je příklad skriptu:
<?php
// vložíme skript s pocitadlem
include "./counter.php";
if ($co == 1)
{
// přesměrování na článek
$redir = "http://www.builder.cz/art/php/count_php.html";
}
elseif($co == 2){
// přesměrování na download
$redir = "http://www.builder.cz/data/count_php.zip";
}else{
// žádné přesměrování
$redir = "";
}
// bude-li se přesměrovávat
if ($redir !=""){
pricti($co);
header("location: " . $redir);
// ukončíme skript
exit;
}
// jinak zobrazíme stránku že odkaz neexistuje
?>
<center>Požadovaný odkaz neexistuje !!!</center>