V mojem prvním tutu se hodlám zabírat počítadlem online uživatelů, kteří si právě prohlížejí vaše stránky. Ale není lepší mít ten krásý pocit že jste ho dokázali splácat sami místo trapného využívání služeb jako blueboard?
Celé to je malinko podvod, ale PHP prostě není na real-time server-klient akce stavěné, budeme si teda muset pomoct jednoduchou fintou.
Stanovíme si čas, po který je považován uživatel jako online (např 5 minut). Při každém načtení naší stránky s kódem počitadla se zkontroluje databáze, jestli je v ní záznam s naším návštěvníkem (jeho IP), který si stránku zrovna prohlíží. Jestli není, přidá se tam společně s časem načtení stránky (jakoby čas poslední aktivity uživatele). Jestli je, zůstane tam a jenom se přepíše čas. Pod to hodíme kód, který prostě smaže z tabulky všechny návštěvníky, kterým už čas uplynul nespustili si na svojí IP skript déle než 5 minut).
Pak už stačí jen zjistit počet řádků co nám v tabulce zbyl a vypsat jej 
Budeme potřebovat databázi a v ní tabulku, kterou pojmenujeme třeba "online". Tabulka by měla obsahovat ID záznamu (auto_increment a primary key), IP návštěvníka a čas jeho posledního klinutí. Takže CREATE TABLE by měl být nějak takhle:"CREATE TABLE online (id INTEGER PRIMARY KEY AUTO_INCREMENT, ip VARCHAR(15) NOT NULL, time VARCHAR(12))".
Samozřejmě že počítám s register_globals = off! Nechat si tam "on" je dost neprofesionální a nebezpečné.
A takhle by mohl vypadat kód našeho Online Meteru, vložený kdekoliv do stránky:
<?php
// připojení k databázi
$connection = mysql_connect("adresa_serveru", "uzivatelske_jmeno", "heslo") or die ("Nepovedlo se navázat spojení se serverem");
mysql_select_db("nase_databaze") or die ("Nepodařilo se připojit k databázi");
//nastavime si aktuální čas
$time = time();
//toleranci nastavíme na 5min (300sekund)
$kick_limit = 300;
//zjistíme si IP návštěvníka
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$explode_ip = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
$ip = $explode_ip[0];
}else{
$ip = $_SERVER['REMOTE_ADDR'];
};
//zjistíme, jestli je v databázi podle IP
$check_result = mysql_query("SELECT * FROM online WHERE ip = '$ip'");
//zapíšeme si ID našeho návštěvníka pro pozdější použití
$user = mysql_fetch_array($check_result, MYSQL_ASSOC);
if(!$check_result){
mysql_query("INSERT INTO online (ip, time) VALUES ('$ip', '$time')");
}else{
mysql_query("UPDATE online SET time = '$time' WHERE id = '{$user['id']}'");
};
//spočítáme si rozdíl časů
$kick_time = $time - $kick_limit;
//a všechny, co to mají čas poslední akce nižsí, vymažem
mysql_query("DELETE FROM online WHERE time < '$kick_time'");
//teď už jenom zjistíme počet zbylých řádků v tabulce a vypíšeme je
$online = mysql_num_rows(mysql_query("SELECT id FROM online"));
echo "Počet online uživatelů: $online<br>";
//a pro jistotu ukončíme mysql spojení
mysql_close($connection);
?>
Doufám že se to dá všechno snadno pochopit =) Akorát menší nejasnosti by asi mohly vzniknout u jišťování IP a kouzlení s $_SERVER['HTTP_X_FORWARDED_FOR']. Ta je tam kvůli lidem připojeným přes proxy - proměnná $_SERVER['REMOTE_ADDR'] by nám v případě více počítačů připojených přes proxy ukázala jen adresu proxy serveru, zatímco v $_SERVER['HTTP_X_FORWARDED_FOR'] by se měly skrývat IP těc počítačů za prochy schovaných, a může jich tam být víc, proto rozdělení pomocíexplode(). Ale tady si ani já nejsem úplně jistý...
Takže připomínky prosím do diskuse a snad mě neukamenujete jestli tam mám chyby
GL při tvoření vlastních Online počitadel 
vetsina vetsich siti ma sdilenou IP

