Vom Surfer Zeitdauer protokollieren

NTDY

Erfahrenes Mitglied
Ich habe eine Website auf der für eingeloggte User gezeigt wird, ob noch andere auf der Seite "online" sind. Beispielsweise:
Code:
User_431dff41 ist online
User_1246dd5 ist offline

Ich würde gern dateibasiert protokollieren wann der User sich eingeloggt hat und wann er meine Website verlassen hat.

Ich dachte, dass die Datei in der er protokolliert wird so aussieht:
Code:
---Für User: User_431dff41----------------------------
User_431dff41 online gegangen 29.03.04-09:34
User_431dff41 offline gegangen 29.03.04-09:50 (16 Minuten online)
User_431dff41 online gegangen 31.03.04-22:12
User_431dff41 offline gegangen 31.03.04-22:22 (10 Minuten online)

---Für User: User_431dff41----------------------------
User_1246dd5 online gegangen 01.02.04-22:00
User_1246dd5 offline gegangen 01.02.04-22:50 (50 Minuten online)

Als Pseudocode dachte ich mir sowas:
Code:
if(User[X]==online){
	1.1. Suche nach dem User[X] in Datei und gehe an die letzte Zeile des letzten Eintrags von ihm
	1.2. Trage die neue Zeit ein
}

if(User[X]==offline){
	2.1. Suche nach dem User[X] in Datei und gehe an die letzte Zeile des letzten Eintrags von ihm
	2.2. Gehe eine Zeile vor und nimmt die Zeit, die dort steht als Differenz zur aktuellen (um die Surfdauer zu schreiben)
	2.3. Gehe wieder in die letzte Zeile und schreibe, wann der User offline gegangen ist und schreibe noch die Zeitspanne dazu
}

Jetzt habe ich vor allem Fragen, wie PHP in der Datei einen Eintrag zur entsprechenden Person findet und in der letzten Zeile des Users die Zeit und den Namen einträgt.

Und wie kann PHP herausfinden, welche Zeit er zur Differenz nehmen soll, wenn ein User XXX offline geht.

Vielleicht hat jemand von euch schon einmal sowas gebaut oder kennt Tutorials oder kann Codeschnipsel als Anregung geben :-)

Liebe Grüße

Andreas
 
Also zunächst mal vorneweg: Eine hundertprozentig genaue Lösung für dein Problem wirst du niemals mi PHP verwirklichen können.

Für den Umgang mit Dateien kann ich dir nur wärmstens das Tutorial hier auf tutorials.de empfehlen: http://www.tutorials.de/tutorials15692.html

Noch ein paar allgemeine Sachen: Um zu kontrollieren, ob ein User noch online ist, wird dir nichts anderes übrig bleiben, als auf einen Klick des Users zu warten, bei dem der Zeitpunkt des Klicks in die Datei eingetragen wird (Ich empfehle dir anstatt eines Datumsformates in der Form 31.03.04-22:22 lediglich den aktuellen Unix-Timestamp zu speichern).
Wenn der User dann eine gewisse Zeit nicht mehr "geklickt hat", dann kannst du ihn als "offline" deklarieren.

Vielleicht hilft es...
 
Naja Dateibasierend ist es a weng umständlicher aber es geht ;-)

Du erstellst meinetwegen eine Datei, wo heist logs.dat.
Ganz wichtig: Sie muss leer sein ;)

Wenn sich nun ein User Namens "Katze" auf deine Seite einloggt schreibt irgendein Script was du fortlaufend includest deine Daten in die logs.dat.

Z.B.

Katze:,:125471457,l;h

Die 125471457 ist eine erdachte Zahl, sie soll den aktuellen Timestamp symbolisieren.
Nun benötigst du eine differenz zweier timestamps, z.B. wieviel 5 Minuten in timestamps sind. Wenn der User auf einen anderen Link deiner Seite klickt prüfst du ob der Name schon in der Logs vorhanden ist. Wenn ja dann Update sie per preg_replace, ereg_replace, etc... .

Wenn nun ein anderer User auf die Seite kommt, berechnet ein Script was du fortlaufend includest alle Zeitdifferenzen die in der logs.dat stehen. Wenn die timestamp Differenzen der jetzigen Zeit größer ist als 5 Minuten dann zeige den User nicht an, wenn Sie kleiner ist, dann zeige ihn als Online an.

Was machst du aber z.B. wenn du einen riesen langen Content hast und er länger als 5 Minuten auf dieser Seite bleibt?

Nun 2 Möglichkeiten tuen sanft an deiner Haustür klopfen:

a) Du machst ein "Reload Meta" das nach 5 Minuten die Seite neu lädt und die Zeiten aktualisiert (uncharmante Methode).
b)Du erstellst ein 1px frame, und steuerst das "Reload Meta" auf den Frame an der dann deine Zeit aktuallisiert (gewöhnungsbedürftige Methode).

Genug Anreiz? ;-)

In diesem Sinne
 
Zurück