Počet online čtenářů v PHP bez použití databáze
Vypsat počet lidí, kteří si právě pročítají naše stránky, můžeme velmi snadno například s využitím databáze a sessions. Dalším možným řešením je evidovat IP adresy klientů a sledovat jejich timeout jen prostřednictvím textového souboru.
Princip spočívá v uložení IP adresy a případně dalších údajů klienta spolu s časem posledního přístupu. Data se ukládají do souboru a pomocí cyklu se čtou. Dvojtečka slouží v řádku jako oddělovač adresy návštěvníka a času, kdy naposledy načetl nějakou stránku. Pro další detaily odkazuji na článek využívající k ukládání dat databázi. Můžete se podívat na ukázku. Celý skript si můžete také stáhnout.
<?php
$fcrr=’readers.txt‘; // jméno souboru, do kterého ukládat IP adresy návštěvníků
$IPadresa=$_SERVER[‚REMOTE_ADDR‘]; // sem „naskládame“ vše, co lze o čtenáři zjistit odděleno zavináčem (adresy uživatelů za proxy ap.)
if ($_SERVER[‚REMOTE_HOST‘])
$IPadresa.=’@‘.$_SERVER[‚REMOTE_HOST‘];
if ($_SERVER[‚HTTP_X_FORWARDED_FOR‘])
$IPadresa.=’@‘.$_SERVER[‚HTTP_X_FORWARDED_FOR‘];
if ($_SERVER[‚HTTP_FORWARDED‘])
$IPadresa.=’@‘.$_SERVER[‚HTTP_FORWARDED‘];
if ($_SERVER[‚HTTP_CLIENT_IP‘])
$IPadresa.=’@‘.$_SERVER[‚HTTP_CLIENT_IP‘];
if ($_SERVER[‚X_HTTP_FORWARDED_FOR‘])
$IPadresa.=’@‘.$_SERVER[‚X_HTTP_FORWARDED_FOR‘];
if ($_SERVER[‚X_FORWARDED_FOR‘])
$IPadresa.=’@‘.$_SERVER[‚X_FORWARDED_FOR‘];
$aktual=time();
$pole=file($fcrr); //přiřadit jméno souboru k poli
for($i=0; $i<Count($pole); $i++) // procházet pole
{
$adresa=StrTok($pole[$i],‘:‘); // rozdělit na adresu a čas záznamy oddělené dvojtečkou
$cas=StrTok(‚:‘);
if ($adresa==$IPadresa) // pokud se adresa rovná některému záznamu, vyřadit jej (vymazat) z pole
$pole[$i]=“;
if ($cas<($aktual-360)) // pokud vypršel timeout 6 minut, vyřadit záznam (vyřadí se neaktivní uživatelé)
$pole[$i]=“;
}
$Fp=FOpen($fcrr,’w‘); // otevřít soubor pro zápis
$celkem=0; // vyčistit proměnnou
for($i=0; $i<Count($pole); $i++)
{
if ($pole[$i]!=“) // je-li co zapsat po předchozím „vyčištění“ pole
{
FPutS($Fp,$pole[$i]); // pak zapsat prvek pole do souboru
$celkem++; // zvýšit počítadlo uživatelů
}
}
FPutS($Fp,$IPadresa.‘:‘.$aktual.“\n“); // připsat adresu aktuálního uživatele a jeho čas
$celkem++; // zvýšit počítadlo o 1 (o aktuálního uživatele)
FClose($Fp); // zavřít soubor
// v $celkem je nyní počet uživatelů online
$mess1=’čte‘;
$mess2=’lidí‘;
if ($celkem<5)
if ($celkem>1)
{
$mess1=’čtou‘;
$mess2=’lidé‘;
}
else
$mess2=’člověk‘; // vyskloňovat podle počtu uživatelů
echo „Stránku si právě $mess1 $celkem $mess2.“; // vypsat počet uživatelů se správným skloňováním
?>
V prvním řádku skriptu je nastaveno jméno souboru, který má sloužit pro ukládání dat. Můžeme jej dát i do nějakého adresáře, cestu je pak třeba uvést také ve skriptu. Všimněte si, že zde nepracujeme jen s IP adresou (REMOTE_ADDR), ale snažíme se uložit co nejvíce údajů z hlaviček, které odeslal browser klienta. Pokud bychom počítali pouze IP adresy, měření by bylo nepřesné v případě sítě s více uživateli připojenými přes proxy – jejich adresa je navenek jediná a tak by třeba i sto čtenářů bylo v našem skriptu bráno jako jeden čtenář. Pokud taková proxy poskytuje v odesílaných hlavičkách například údaj HTTP_FORWARDED, měření bude přesnější. Jak je vidět z posledních řádků skriptu, je vyřešeno i správné skloňování při počtu čtenářů 1, 2 až 4, 5 a více čtenářů.
Uvedený skript pomocí include zahrneme do všech stránek, ve kterých chceme zobrazovat a počítat aktuální počet čtenářů například takto:
<html>
<head>
<meta http-equiv=“Content-Type“ content=“text/html; charset=windows-1250″>
<title>Počet online uživatelů</title>
</head>
<body>
<p>Toto je velmi zajímavá stránka.</p>
<p><?php include(‚readers.php‘); ?></p>
</body>
</html>
Nakonec je nutné nastavit práva pro zápis do souboru readers.txt
, který je nutné nahrát také na server – podrobný návod naleznete v článku o návštěvní knize.
Pozn. red.: Tento článek vyšel poprvé 13. 8. 2002. Původní verze článku a k němu vedené diskuse jsou vám k dispozici v ZIP archivech.
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Mohlo by vás také zajímat
-
Thunderbolt 4 vs. OCuLink: Přišel čas na upgrade?
27. května 2024 -
Jaký monitor je nejlepší k novému Macu Mini?
25. listopadu 2024 -
Od iPhonu po Android: Ultra HDR přináší nový standard fotografií
1. listopadu 2024
Nejnovější
-
Jak rozšířit úložiště Macu za pětinovou cenu?
16. prosince 2024 -
Nové trendy v doménách pro osobní projekty – DIY, LIVING a LIFESTYLE
9. prosince 2024 -
Jak chránit webové stránky před Web/AI Scrapingem
27. listopadu 2024 -
Jaký monitor je nejlepší k novému Macu Mini?
25. listopadu 2024