Segédletek.hu

Segédletek weblap szerkesztéshez!
ingyen letöltés

| Mind | PHP | HTML | CSS | Java |
|Legújabbak |Legtöbbször olvasottak|

Online látogató számláló:

Sorozat - ingyen számláló scriptek:

Egy olyan php script írását tűztem ki célul, amelyik számolja az éppen online látogatókat!

Mielőtt elkezdeném, el kell mondjam, hogy a HTTP protokoll sajátosságai miatt ez nem egy 100% - ig pontos számláló. Azt nem tuhatjuk pontosan, hogy az adott user még 1mp múlva is ott lesz-e, vagy már rég elment. Ezért egy ilyen számláló általában az elmúlt pár perc adatait nézi. Jelen esetben én most az elmúlt 5 perc alapján fogom eldönteni, hogy ki online, és ki nem. Az azonosítás ip alapján fog történni. Aki egy adott ip - ről 5 percnél korábban töltött le lapot, az online.

Akkor vágjunk is bele. Ehhez szükségünk lesz egy adatbázisra.

install.sql
DROP TABLE IF EXISTS online;
  CREATE TABLE online(
  id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  ip VARCHAR(30),
  datum DATETIME
);

Ezzel létrehozunk egy táblát, amibe majd a látogatásokat tároljuk.
Hozzunk létre egy konfig fájt a mysql kapcsolódáshoz:

config.php
<?php
/*Konfiguráció*/
$dbhost = "localhost";
$dbuser = "root";
$dbpass = "";
$dbname = "online";
/*Kapcsolódás*/
$connect = mysql_connect($dbhost,$dbuser,$dbpass);
mysql_select_db($dbname) OR die(mysql_error());
?>

Mint írtam, az azonosítás ip alapján fog menni. Azt le kell kérdezni, amire van egy ip lekérdező script - em.
getip.php
<?php
/**
 * A felhasználó ip címét kérdezi le.
 *
 * @return string
 * @package www.segedletek.hu
 */

function getip()
{
    if (isset($_SERVER))
    {
        if (isset($_SERVER["HTTP_X_FORWARDED_FOR"]))
        {
            $realip = $_SERVER["HTTP_X_FORWARDED_FOR"];
        }
        elseif (isset($_SERVER["HTTP_CLIENT_IP"]))
        {
            $realip = $_SERVER["HTTP_CLIENT_IP"];
        }
        else
        {
            $realip = $_SERVER["REMOTE_ADDR"];
        }
    }
    else
    {
        if ( getenv( 'HTTP_X_FORWARDED_FOR' ) )
        {
            $realip = getenv( 'HTTP_X_FORWARDED_FOR' );
        }
        elseif ( getenv( 'HTTP_CLIENT_IP' ) )
        {
            $realip = getenv( 'HTTP_CLIENT_IP' );
        }
        else
        {
            $realip = getenv( 'REMOTE_ADDR' );
        }
    }
    return $realip;
}
?>

Egyszerű kis kód, egy függvény, ami a valós ip címmel tér vissza. Ezt fogjuk majd incudolni a főprogramunkba.
Akkor most jöjjön a hab a tortán a
counter.php
<?php
include "config.php";
include "getip.php";

/*Régi adatok törlése:*/
$sql = "DELETE FROM online WHERE( (INTERVAL 5 MINUTE + datum) < '".date("Y-m-d H:i:s")."')";
$query = mysql_query($sql);


/*Látogatás logolása:*/

$sql = "SELECT INTERVAL 5 MINUTE + datum as datum FROM online WHERE(ip='".getip()."')";
$query = mysql_query($sql);
$rs = mysql_fetch_array($query);

if(mysql_num_rows($query) > 0){
  $sql = "UPDATE online SET datum=NOW() WHERE (ip='".getip()."')";
}
else{
  $sql = "INSERT INTO online (ip, datum) values ('".getip()."',NOW())";
}
$query = mysql_query($sql);

$sql = "SELECT COUNT(id) AS darab ";
$sql.="FROM online";
$query = mysql_query($sql);
$rs = mysql_fetch_assoc($query);
$online = $rs['darab'];
?>

<?php
  echo "jelenleng ".$online." online látogató van itt";
?>

A kód elején töröljk az adatbázisból az 5 percnél régebbi sorokat. Ha ez megvan, megnézzük, hogy van - e az adott ip - vel sor. Ha van, akkor frissítjük a dátumot. Ha nincs, akkor beszúrunk egy új sort. A kód végén lekérdezzük az adatokat, és megszámoljuk a sorokat. Ez adja az online látogatókat.
Ennyi az egész. Egyszerű kis scrit. Nem túl bonyolult.

működő demó
Forrás fájlok egyben

Írta: requiem - 2007-05-08 16:34:59

* Nem vagy bejelentkezve!
* Nem töltheted le a segédlet forrását egyben!
* Nem szavazhatsz a segédletre!
* Nem írhatsz a segédlethez tartozó fórum témába!


DyGery 2009-03-17 15:56:18
Hello!
Megoldottam!
Az volt a hibám hogy kétszer hívtam eg az oldlam a getip függvényt :-D
Köszi a scriptet nagyon király!!
DyGery 2009-03-17 11:53:26
Hello!
Egy kis segitség kéne:-D
ha a counter.php tartalmát elhelyezem a saját php fájlomba akkor a következ? hibát generálja:

Fatal error: Cannot redeclare getip() (previously declared in C:AppServszamlaloklatogatogetip.php:10) in C:AppServszamlalokonlinegetip.php on line 14

vajon mért?
köszi a segitséget el?re is!!
Mauritusz 2008-11-25 23:57:57
Jó ez a zámláló. Én még hozzátettem azt, hogy kiíratom a nevet is, de az alap az marad.
Csatlakozz a GDF-hez
Játssz, és nyerj SZIN jegyet És tanulj nálunk tovább
gdf.info.hu

Miért fizetne többet?
Akciós élelmiszer, műszaki cikk, gyümölcs, bútor. Nézzen be, megéri!
www.tesco.hu

10.000 €-t keresni havonta
Hogyan keressünk pénzt könnyedén? Kezdjen pénzt keresni még ma!
www.penzt-keresni.net

Pótjelentkezés
a Gábor Dénes Főiskolára! Alap-(BSc), felsőfokú (OKJ) szakképzések
gdf.info.hu

Toyota készletakció
Auris Optimis modellek 1 000 000 Ft árelőnnyel! Részletek
www.toyota.hu

Hirdessen itt