Um dies für jeden anderen zu lösen, hier. Stellen Sie den Code der Reihe nach zusammen und verwenden Sie die Anweisungen auf dem Weg. Benötigt PHPs GD-Erweiterung.
Erstellen Sie ein Verzeichnis in Ihrem Webroot, stellen Sie sicher, dass der Web-Daemon, um es schreiben:
mkdir liveusers
erstellen ein PHP-Skript (vlive.php zum Beispiel) für die Touch Code (btw. touch ist ein standard * nix-Befehl, benutze das system(), passthru() oder exec(), was immer du möchtest, um es zu benutzen). Habe es Touch eine Datei in diesem Verzeichnis mit einem eindeutigen Dateinamen, zum Beispiel IP + SessionID concat'd zusammen:
<?php
exec("touch ". $_SERVER['DOCUMENT_ROOT']."/liveusers/". md5($_SERVER['REMOTE_ADDR'].session_id())); /* SECURITY RISK */
Jetzt, in der gleichen Datei wir brauchen einen JPEG-Finish es zur Ausgabe aus mit richtige header() 's habe ich ein 1x1 Pixel namens Pixel.jpg in den des Webroot/images/Verzeichnis, etwas anderes zu tun frei fühlen:
$NewImage = imagecreatefromjpeg($_SERVER['DOCUMENT_ROOT']. "/images/pixel.jpg");
header("Content-type: image/jpeg");
imagejpeg($NewImage);
?>
Speicher, um die PHP-Datei, legen Sie dann einen Standard-HTML-Tag in Ihrem Dokument, um es nützlich:
<img src="/vlive.php" alt="Imagination!" />
Going pure PHP mit diesem dann Caching-Seiten wird es nur so machen, dass die Live-Benutzer-Dateien kaum jemals erhalten touch 'd. Auf diese Weise können Sie immer noch Live-Benutzer zählen und ein vollständiges Seiten-Cache-System auf Ihrer Website verwenden.
Ok, jetzt berührt jede Seite, die ein Besucher lädt, ihre eindeutige Datei. Wenn sie gerade erst angekommen ist, erstellt der Touch-Befehl eine Datei für diesen Benutzer. Wenn sie auch andere Seiten besucht, wird das Zugriffsdatum bearbeitet mit dem gleichen Touch Befehl.
Dies ist, wo es wird nützlich:
In einem anderen PHP-Skript (sagen wir mal readvlive.php):
<?php
$livenum = system("find ".$_SERVER['DOCUMENT_ROOT']."/liveusers/ -type f -amin +10 | wc -l");
echo "Live Visitors: ". $livenum;
?>
Nun wollen wir diesen Code in das HTML-Element enthalten Sie möchten zu sehen, um es in:
<?php include($_SERVER['DOCUMENT_ROOT']. "/readvlive.php"); ?>
Ok, so jetzt haben wir eine Datei, die es aus der Anzahl der eindeutigen Dateien mit einer Zugriffszeit nur drucken wird geändert vor 10 Minuten. Dies sind unsere Live-Benutzer in den letzten zehn Minuten ...
Jetzt haben wir die Wahl hier, wieder, wenn Sie den vollen Seitencache verwenden, könnten Sie die zwischengespeicherte Live-Nummer in diese Dokumente einfrieren, so dass es eher ärgerlich und nutzlos. Dazu schlage ich PrototypeJS (Google it), verwenden Sie ihre Phantasie AJAX-Tools, legen Sie diesen zwischen <head></head>
<script src="/js/prototype.js" type="text/javascript"></script>
dann diese über dem Tag </body>
platzieren.
<span id="live_users_count"> </span>
<script type="text/javascript">
<!--
Event.observe(window, 'load', function() {
if($('live_users_count')) {
new Ajax.Updater('live_users_count','/readvlive.php');
}
}
-->
</script>
Sollte in Ordnung sein .. nicht zu rau. Wenn Sie daran interessiert sind, wie weit Ihr Verzeichnis diesen Suchbefehl ausführen soll, könnten Sie APC oder etwas zum Zwischenspeichern verwenden. Dieses Beispiel erfordert APC 3.1.4:
<?php
if(apc_exists('livenum')){
$livenum = apc_fetch('livenum');echo $livenum;
} else {
$livenum = system("find ".$_SERVER['DOCUMENT_ROOT']."/liveusers/ -type f -amin +10 | wc -l");
apc_add('livenum',$livenum,30);
}
?>
APC 3.0.13 und höher:
<?php
if($livenum = apc_fetch('livenum')){
echo $livenum;
} else {
$livenum = system("find ".$_SERVER['DOCUMENT_ROOT']."/liveusers/ -type f -amin +10 | wc -l");
apc_add('livenum',$livenum,30);
}
?>
Diese werden verwenden APC-Caching für 30 Sekunden, um die letzten 10 Minuten Live-Nutzer zeigt, finden laufen Befehl, um es zweimal pro Minute zu berechnen. Nicht schlecht. : P
reinigen kann bis mit crontab ..
Das Skript (/root/deloverhead erfolgen.sh):
#!/bin/sh
find "/path/to/liveusers/ -type f -amin +60 -exec rm {} \;
Crontab Eintrag (jede Stunde):
0 * * * * /root/deloverhead.sh >/dev/null 2>&1
Viel Spaß, sorry ich erklären könnte, die Dinge seltsam. : P
Datenbank-Methode ist die langsamste und größte Drosselung für jede Web-Anwendung. Mein Ziel ist es, die Anzahl der Datenbankabfragen auf ein Minimum zu reduzieren. Ich mag die Idee des Cronjobs oder zumindest einen laufenden Prozess. –