Scripts

Users Online

Om als eerste mee te beginnen: Ik heb dit script niet helemaal zelf gemaakt. Ik heb een groot deel vanaf een andere site. De credits gaan dan ook uit naar die onbekende persoon. Ik zal zijn toelichting hier ongeveer vertalen: Stap voor stap weergave van het script: 1. Neem de eerste 3 reeksen van het IP (nnn.nnn.nnn) 2. Voeg de rij toe aan de database 3. Verwijder oude rijen 4. Tel de online users 1. Waarom de eerste 3 reeksen van een IP? Dit is voor proxies, zoals de AOL proxy, AOL gebruikers krijgen een IP adres uit een reeks IP's welke bij de proxy hoort. Normaal blijft een ip een hele sessie hetzelfde, maar met proxy's kan elke HTTP request een ander IP zijn. Maar meestal behoren deze IP's aan een bepaald subnet dus de eerste 3 reeksen zijn dan hetzelfde. 2. Waarom een loop en een timestamp toevoeging Sinds dat de key van de tabel timestamp is, moet de timestamp uniek zijn. Soms treden er fouten op, een gebruiker krijgt een timestamp en de andere een error dat de key al bezet is.. Om dit te onderdrukken gebruiken we het @ teken om een error tegen te houden, tellen we bij de timestamp 1 of 2 op en voegen we hem opnieuw toe. Maar die herhaling word beperkt tot 3 voor de sites die een GROTE hoeveelheid traffic krijgen. 3. Verwijder oude rijen Het script zal elke rij checken of het binnen de toegelaten tijd valt. Zo niet, de rij zal worden verwijderd. 4. Laat de teller zien Selecteer het aantal van unieke IP's in de tabel. Tel het op en geeft het resultaat weer van de online gebruikers. De SQL tabel ** Wees er zeker van dat je dit heb toegevoegd aan de database voordat je het script draait CREATE TABLE `useronline` ( `timestamp` int(15) NOT NULL default '0', `ip` varchar(40) NOT NULL default '', `file` varchar(100) NOT NULL default '', PRIMARY KEY (`timestamp`), KEY `ip` (`ip`), KEY `file` (`file`) ) TYPE=MyISAM; Dit was de toelichting van de officiele maker, ik heb er niets aan toe te voegen. (misschien klopt de vertaling niet maar je snapt het wel :)) Include het bestand gewoon op de pagina's waarop je wilt tellen. De connectie variabelen kan je weglaten als je voor dit script al een database connectie heb.

users-online
<?php
/*
Script by Marien den Besten and someone else :)

Er word gecontroleerd op de eerste 3 gedeelten van een ip. Dit ter voorkoming van proxies die steeds wisselen van ip nummer.
*/

// Database connectie (kan weggelaten worden als er al een connectie is)
$dbhost = "localhost";
$dbuser = ""; // MySQL gebruikersnaam
$dbpass = ""; // MySQL wachtwoord
$dbname = ""; // database naam

// Connect to MySQL Database
@mysql_connect($dbhost,$dbuser,$dbpass);
@mysql_select_db($dbname) or die("Geen database geselecteerd");
//einde database connectie

$timeoutseconds = 120; //een user blijft 2 minuten online = 120 seconden

$timestamp=time();
$timeout=$timestamp-$timeoutseconds;
$ip = substr($_SERVER['REMOTE_ADDR'], 0, strrpos($_SERVER['REMOTE_ADDR'],"."));

// De gebruiker toevoegen aan de database
$loopcap = 0;
while($loopcap<3 && @mysql_query("INSERT INTO useronline VALUES('". $timestamp ."','". $ip ."','". $_SERVER['PHP_SELF'] ."')"))
{ 	// In geval van error
	$timestamp = $timestamp+$ip{0}; $loopcap++;
}

//Verwijder gebruikers dat niet binnen de $timeoutseconds online zijn geweest
@mysql_query("DELETE FROM useronline WHERE timestamp<". $timeout);

// Selecteer de online gebruikers
$result = @mysql_query("SELECT DISTINCT ip FROM useronline");
$user = @mysql_num_rows($result);

//het mysql geheugen vrij maken. Als er bijv. grote aantallen users zijn...
mysql_free_result($result);

//alle online gebruikers laten zien
echo ($user == 1) ? $user ." gebruiker online" : $user ." gebruikers online";
?>

Reacties

0
Nog geen reacties.