Stránko moje, jakou návštěvnost dnes máš – základní skript

21. listopadu 2000

Pokud máte své stránky, asi by jste rádi věděli jakou mají návštěvnost. Není nic jednoduššího, než dát na stránku nějaké počítadlo přístupů. A přesně o tom bude můj dnešní článek – o vytvoření vlastního počítadla v PHP s pomocí MySQL a cookies.

Dříve, než začneme programovat, si řekneme něco o měření přístupu. Sice jen orientačně, ale je dobré něco o tom vědět. V zásadě se přístupy na stránky měří dvěmi způsoby:

  • zpracováním logů
  • "měřícím" skriptem (počítadlo), který počítá návštěvníky.

Zpracování logů je podrobnější a loguje každý stažený/prohlédnutý soubor z webu. Ale není online. Záznamy z logů se používají na zpětnou analýzu přístupů – odkud kdo a kam chodí, v kolik hodin, kdy je špička, atd.

Počítadla lze dělit do několika skupin např. podle toho co umožňují, kde jsou umístěna, jak pracují apod. Některá vám pouze zobrazí počet návštěv, jiná přidají i statistiky obdobné záznamům z logu. Ale na rozdíl od logu, počítadlo měří jen přístup na stránku, kde je umístěno. A je tu i další háček. Většina z volně poskytovaných počítadel na Internetu pracuje tak, že na své stránky umístíte ikonu počítadla, která je stahována ze serveru počítadla. Jenže hodně uživatelů má zakázáno zobrazování grafiky a vy tím pádem nevíte vůbec o jeho návštěvě.

Druhá varianta funguje za pomocí JavaSciptu, ale zase, tu a tam se najde někdo, kdo ho má vypnutý. A je tu ještě jeden problém, se kterým se velmi často setkáte. Počítadlo často nerozlišuje mezi první návštěvou na stránce a jejím reloadem. Takže sice počítadlo skáče, ale jeden člověk udělá třeba 5 návštěv, takže údaj je k ničemu. A i počítadla, které tuto chybu nemají, měří podle IP adresy, ale ne konkrétního uživatele. Prostě najít to nejlepší počítadlo je problém. A abych nezapomněl, váš web může běžet, ale služba počítadla ne.

Zavěrem předchozího odstavce je prostě to, že je lepší mít vlastní počítadlo. To, které si dnes naprogramuje, bude sloužit pouze k počítání přístupů a někdy příště si ho trošku rozšíříme.

K jednoznačnému určení návštěvníka použijeme cookies, což je asi jedna z nejméně vypínaných věcí. Cookies jsou malé soubory, které si prohlížeč ukládá na disk. Mohou obsahovat např. ID session na serveru, personifikační údaje pro úpravu vzhledu stránek které navštěvujete a v případě některých nesvéprávných programátorů i heslo. My si tam jenom uložíme ID počítadla pro identifikaci.

Při návrhu počítadla je třeba si uvědomit, co budeme považovat za návštěvu a co za reload stránky. Já osobně považuji návrat na stránku pod 20 minut za obyčejný reload. Ale někdo může mít jiný názor, a proto náš skript bude umožňovat změnu tohoto intervalu.

Nejdříve si navrhneme tabulku v databázi. Tady je SQL skript:

CREATE TABLE Tcounter(
CounterID INT NOT NULL PRIMARY KEY AUTO_INCREMENT, — identifikator počítadla
SPath VARCHAR(122), — cesta ke stránce, kterou monitorujeme
Visits INT — počet návštěv
);

CounterID je jednoznačný identifikátor počítadla, který si budeme ukládat do cookie. SPath je cesta ke stránce kterou budeme monitorovat. No a Visits je počet návštěv na stránce.

Vlastní skript počítadla budeme do stránek vkládat pomocí direktivy include. Např. include("counter_inc.php"); Include, respektive zápis cookie, musí proběhnout před tím než odešlete cokoliv klientovy.

Nejdříve si sejmeme cestu ke stránce. Ta je uložená v PHP proměnné $PATH_INFO. Uložíme ji do proměnné $SPath. Pak nastavíme proměnnou $CookieDeath, která obsahuje časový limit v minutách, kdy se už nebere návštěva na stránce jako reload, ale jako další návštěva. Otevřeme si spojení na databázi s použitím @, jelikož nestojíme o to, aby nám případná chybka v komunikaci s DB počítadla, znemožnila zobrazení obsahu stránky. Zjistíme jestli je nastavena proměnná $CounterID. Tato proměnná se nesmí pochopitelně vyskytovat ve Vašem PHP kódu stránky. Tato proměnná je uložena v naší cookie a  pokud není nastavena, znamená to, že:

  1. cookie vypršela – návštěvník zde nebyl déle než limit nastavený v  $CookieDeath
  2. první návštěva této stránky
  3. cookies nejsou povoleny
$SPath=$PATH_INFO;
$CookieDeath=20;
@$Conn=mysql_connect(„adresa_srv“,“user_id“,“heslo“);
mysql_select_db(„moje_database“);
if (empty($CounterID)){
$SQLText=“SELECT * FROM Tcounter WHERE SPath=’$SPath“‚;
$result=mysql_query($SQLText);
if (mysql_num_rows($result)==0){
$SQLText=“INSERT INTO Tcounter (SPath,Visits) VALUES (‚$SPath‘,1)“;
$result=mysql_query($SQLText);
$Visits=1;
$CounterID=mysql_insert_id($result);
}
else{
$row=mysql_fetch_array($result);
$Visits=++$row[„Visits“];
$CounterID=$row[„CounterID“];
$SQLText=“UPDATE Tcounter SET Visits=$Visits WHERE CounterID=$CounterID“;
$result=mysql_query($SQLText);
}
}

Takže pokud není $CounterID nastaveno, zeptáme se databáze, jestli má záznam o naší stránce, pokud ne, založíme naší stránku do databáze s hodnotou Visits=1 a sejmeme si $CounterID našeho nového počítadla. Jestliže již počítání přístupů probíhá, vybereme si údaj o návštěvách a navýšíme ho o 1 a sejmeme si $CounterID pro danou stránku. Poté uložíme navýšený údaj o návštěvách do databáze.

Pokud je $CounterID nastaveno, vybereme si pouze údaj o počtu visits na stránce:

$SQLText=“SELECT Visits FROM Tcounter WHERE CounterID=$CounterID“;
$result=mysql_query($SQLText);
$row=mysql_fetch_array($result);
$Visits=$row[„Visits“];

Zavřeme databázi a nastavíme cookie. Jejími parametry jsou 

  • jméno naší proměnné (CounterID)
  • hodnota této proměnné ($CounterID)
  • doba kdy tato cookie vyprší (time()+$CookieDeath*60). Stávající čas + doba nastavená v $CookieDeath. To násobení 60 je tam proto, že time vrací čas v sec.
setcookie("CounterID",$CounterID,(time()+$CookieDeath*60));

A to je vlastně vše. Nyní máme v proměnné $Visits aktuální počet návštěvníků a stačí jej zobrazit např. pomocí tohoto PHP skriptu:

<? echo "Počet návštěv na této stránce : $Visits"; ?>

A to je pro dnešek vše. Zdrojové soubory ke článku si můžete stáhnout zde.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Štítky: Články

Mohlo by vás také zajímat

Nejnovější

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *