Počet současně připojených uživatelů v PHP

16. května 2001

V tomto článku vám představím užitečnou aplikaci. Podle vydaných článků na Interval.cz již ovládáte práci s proměnnými, soubory, cykly i podmínkami Živě a jiných a tak předpokladám, že následují skript, který vám bude na stránkách počítat počet současně připojených uživatelů, byste měli bezproblému zprovoznit.

Celou aplikaci si předem vyzkoušejte, ať víte, co vlastně pomocí článku společně vytvoříme. A nyní se už pustíme do tvorby počítadla. Klasické počítadlo návštěv je na jednu stranu oproti tomuto "hloupé", jelikož nám zobrazí minulý počet a připočte k němu +1, ale toto se nám po každých 5 minutách (dle timeout) zresetuje a ukáže, na kolika IP adresách skript běží.

Pro měření aktuálního počtu uživatelů si vytvoříme jednoduchou tabulku, která bude obsahovat čas, seznam aktuálních IP adres a soubor, ze kterého přišel požadavek návštěvy:

CREATE TABLE useronline (
timestamp int(15) DEFAULT ‚0‘ NOT NULL,
ip varchar(40) NOT NULL,
file varchar(100) NOT NULL,
PRIMARY KEY (timestamp),
KEY ip (ip),
KEY file (file)
);

Struktura přihlašovacího skriptu:

$server = „localhost“;
$db_user = „mysql_uzivatel“;
$db_pass = „mysql_heslo“;
$database = „mysql_database“;

Tím jsme nastavili spojení s MySQL databází. Proměnná $server je jméno databázového serveru, který by vám měl sdělit správce serveru. Tento název bývá nejčastěji „localhost“, „default“ nebo samotná IP adresa serveru, na kterém MySQL běží. Proměnná $db_user nám udává uživatelské jméno, které vám bylo přiděleno pro vstup do databáze. Proměnná $db_pass je heslo pro vstup do databáze a $database je jméno databáze.

$timeoutseconds = 300;
$timestamp=time();
$timeout=$timestamp-$timeoutseconds;
mysql_connect($server, $db_user, $db_pass) or die („ERROR : ve spojeni s tabulkou useronline“);

Výše uvedený kód slouží k ověření propojení s databází. Proměnná $timeoutseconds je časová prodleva mezi dalším zaktualizováním počítadla. $timestamp nám udává čas vstupu na stránku. Výsledná proměnná $timeout určí čas zaktualizování počítadla – za podmínky, že aktuální čas a prodleva je větší jež čas vstupu.

mysql_db_query($database, „INSERT INTO useronline VALUES (‚$timestamp‘,’$REMOTE_ADDR‘,’$PHP_SELF‘)“) or die(„ERROR : v zapisu do tabulky useronline");

Tento MySQL příkaz zapíše čas vstupu návštěvníka, jeho IP adresu a stránku, ze které počítadlo počítá:

mysql_db_query($database, „DELETE FROM useronline WHERE timestamp<$timeout") or die("ERROR : ve smazani TIMEOUTu v tabulce useronline");
$result=mysql_db_query($database, „SELECT DISTINCT ip FROM useronline WHERE file=’$PHP_SELF'“) or die(„ERROR: ve vyjmuti udaju z tabulky useronline“);
$user =mysql_num_rows($result);
mysql_close();

Nyní dostaneme aktuální počet návštěvníků, který máme v proměnné $user. Takže zavřeme spojení s databází (já vím že to PHP udělá samo, ale jsou jisté návyky, kterých je lepší se nezbavovat). Tento počet návštěvníků si necháme vypsat příkazem echo. Ještě aby nám nevznikla drobná chybička ze strany českého jazyka, vytvoříme si skloňování dle počtu návštěvníků:

if ($user==“1″):
echo“Web si právě čte $user člověk“;
else:
if ($user<"5"):
echo“Web si právě čtou: $user lidé“;
else:
echo“Web si právě čte: $user lidí“;
endif;
endif;
?>

A to je pro dnešní den vše, programátoři. Zdrojový kód článku si můžete stáhnout zde nebo výsledek ještě vyzkoušet.

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

Nejnovější

Napsat komentář

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