Willkommen auf dem Portal für Mediengestalter
|
|
Autor |
Nachricht |
ggrrrr
Threadersteller
Dabei seit: 20.09.2006
Ort: Berlin / Stuttgart
Alter: 40
Geschlecht:
|
Verfasst Do 08.11.2007 22:00
Titel User Online Script gesucht |
|
|
Hallo Leute,
ich bin schon ziemlich genervt weil ich seit 4 Stunden über google und diverse php archive einen stinknormalen und ganz einfachen user online counter suche, der mir anzeigt wieviele user momentan online sind, wieviele gestern und wieviele insgesamt. Das ganze soll auf php basieren ohne irgendeinen schnick schnack mit einer einfachen und verständlichen Anleitung.
Villeicht wird mir ja hier geholfen, bin schon ziemlich sauer das ich nichts passendes finde !
danke im vorraus
|
|
|
|
|
remote
Dabei seit: 10.11.2006
Ort: /var/www/
Alter: 110
Geschlecht:
|
Verfasst Do 08.11.2007 23:56
Titel
|
|
|
...eigentlich doch ziemlich simpel.
Du brauchst die Uhrzeit, IP des Besuchers und das Datum... ggf. noch einen Gedanken an Suchmaschinen und Crawler verschwenden, die ohne Filter leicht 90% deiner Klicks ausmachen werden.
..also ganz rudimentär... erstmal die Werte sammeln:
Code: | $timestamp = time();
$ip = $_SERVER['REMOTE_ADDR'];
$time_month = date("m",$timestamp);
$time_year = date("Y",$timestamp);
|
...dann das ganze in eine Datenbank-Tabelle und jeden Eintrag nach XY Minuten verwerfen:
Code: | $diff = time()-800;
// bestimmt wie lange ein User nach der letzten Aktion als online zählt (Sekunden).
$dz = mysql_connect(localhost, "user", "pass");
mysql_select_db(datenbank, $dz);
// überfällige einträge löschen
mysql_query("DELETE FROM `table` WHERE time < ".$diff."");
// prüfen ob der besucher schon als online gezählt wird
$qonline = "SELECT COUNT(*) FROM `table` WHERE `ip`='".$ip."'";
list($online) = mysql_fetch_row(mysql_query($qonline));
if($online > 0) {
// IP steht bereits in DB
$query = "UPDATE `table` SET `time`='".time()."' WHERE `ip`='".$ip."' ";
mysql_query($query);
} else {
// IP steht noch nicht in DB
$query = "INSERT INTO `table` SET `time`='".time()."',`ip`='".$ip."'";
mysql_query($query);
// hier könnte nun zusätzlich der gesamtcounter um 1 erhöht werden
}
mysql_close($dz); |
Wenn du neben IP und dem Timestamp der letzten Aktualisierung auch sehen willst wieviele gestern, letzten Monat oder im laufenden Jahr auf deine Seite gekommen sind, trägst du eben noch date() mit ein und kannst dann bei der Anzeige entsprechend filtern.
Prinzipiell ganz einfach... und unendlich ausbaufähig: Crawler registrieren, Visits und Hits besser trennen, Referer, Sprache, Herkunft, Re-Visits, Verweildauer, Klickrate... super Thema um sich ein bischen mit PHP zu beschäftigen. Im entsprechenden Forum hilft man dir sicher gerne bei der Erstellung deines Counters
Wenn du was fertiges abstauben willst, schau dir Google-Analytics an oder guck hier, weil so
|
|
|
|
|
Anzeige
|
|
|
rob
Dabei seit: 11.12.2003
Ort: ~/
Alter: 46
Geschlecht:
|
Verfasst So 11.11.2007 03:15
Titel
|
|
|
HTTP ist ein zustandloses Protokoll.
Du kannst daher unmöglich, ein wirklich funktionierendes User-Online-Script schreiben.
Du kannst eigentlich nur Rateversuche anstellen, wie viele User gerade online sind.
Je nachdem wie du das anstellst, kannst du allerdings eventuell zu brauchbaren Ergebnissen kommen.
Allerdings bin ich nicht ganz sicher, was du eigentlich genau suchst...
Wie viele User momentan gerade online sind und wie viele User die Tage zuvor auf der Site waren, sind unterschiedliche Dinge.
Für das Erste hat remote dir schon was geschrieben und gleich folgt noch ein Link von mir.
Für das Zweite würde ich die Server-Logs auswerten und dieses eventuell grafisch darstellen.
Zitat: | bin schon ziemlich genervt weil ich seit 4 Stunden über google |
4 Stunden Suche?
Ich finde mit Google sofort etwas, schon beim ersten Versuch:
http://tut.php-quake.net/online.html
|
|
|
|
|
pRiMUS
Dabei seit: 09.09.2003
Ort: Vienna
Alter: 48
Geschlecht:
|
Verfasst So 11.11.2007 11:25
Titel
|
|
|
remote hat geschrieben: | ...eigentlich doch ziemlich simpel.
Du brauchst die Uhrzeit, IP des Besuchers und das Datum... ggf. noch einen Gedanken an Suchmaschinen und Crawler verschwenden, die ohne Filter leicht 90% deiner Klicks ausmachen werden.
..also ganz rudimentär... erstmal die Werte sammeln:
Code: | $timestamp = time();
$ip = $_SERVER['REMOTE_ADDR'];
$time_month = date("m",$timestamp);
$time_year = date("Y",$timestamp);
|
...dann das ganze in eine Datenbank-Tabelle und jeden Eintrag nach XY Minuten verwerfen:
Code: | $diff = time()-800;
// bestimmt wie lange ein User nach der letzten Aktion als online zählt (Sekunden).
$dz = mysql_connect(localhost, "user", "pass");
mysql_select_db(datenbank, $dz);
// überfällige einträge löschen
mysql_query("DELETE FROM `table` WHERE time < ".$diff."");
// prüfen ob der besucher schon als online gezählt wird
$qonline = "SELECT COUNT(*) FROM `table` WHERE `ip`='".$ip."'";
list($online) = mysql_fetch_row(mysql_query($qonline));
if($online > 0) {
// IP steht bereits in DB
$query = "UPDATE `table` SET `time`='".time()."' WHERE `ip`='".$ip."' ";
mysql_query($query);
} else {
// IP steht noch nicht in DB
$query = "INSERT INTO `table` SET `time`='".time()."',`ip`='".$ip."'";
mysql_query($query);
// hier könnte nun zusätzlich der gesamtcounter um 1 erhöht werden
}
mysql_close($dz); |
Wenn du neben IP und dem Timestamp der letzten Aktualisierung auch sehen willst wieviele gestern, letzten Monat oder im laufenden Jahr auf deine Seite gekommen sind, trägst du eben noch date() mit ein und kannst dann bei der Anzeige entsprechend filtern.
Prinzipiell ganz einfach... und unendlich ausbaufähig: Crawler registrieren, Visits und Hits besser trennen, Referer, Sprache, Herkunft, Re-Visits, Verweildauer, Klickrate... super Thema um sich ein bischen mit PHP zu beschäftigen. Im entsprechenden Forum hilft man dir sicher gerne bei der Erstellung deines Counters
Wenn du was fertiges abstauben willst, schau dir Google-Analytics an oder guck hier, weil so |
mal als tipps:
1. niemals auf die ips prüfen, da diese nicht einmalig sind, bei der nächsten einwahl hat jemand anders die ip und du hast sie evtl noch im cache, lieber eine unique id in der session mit speichern und diese in der db abfragen.
2. warum die überfälligen daten aus der db entfernen, man könnte somit auch noch rausfiltern wie oft der benutzer sich angemeldet hat und statistiken wann er meistens online ist.
3. verwende bitte niemals die php datums funktionen, wenn mysql die selbst und sogar besser beherrscht. vor allen dingen dann nicht, wenn du versuchst den timestamp als varchar (so sieht es im moment aus) ablegen willst. zeit und datums einträge sollten im spalten format date oder besser datetime angelegt werden, um dann a) damit rechnen zu können und b) querys darauf abzusetzen.
Code: | insert into tabelle set (datum) values (NOW()) |
|
|
|
|
|
remote
Dabei seit: 10.11.2006
Ort: /var/www/
Alter: 110
Geschlecht:
|
Verfasst So 11.11.2007 11:39
Titel
|
|
|
pRiMUS hat geschrieben: |
mal als tipps:
1. niemals auf die ips prüfen, da diese nicht einmalig sind, bei der nächsten einwahl hat jemand anders die ip und du hast sie evtl noch im cache, lieber eine unique id in der session mit speichern und diese in der db abfragen. |
Sicherlich richtig - auch wenn die Chance, dass innerhalb von X Minuten 2 unterschiedliche User mit der selben IP auf die Seite gelangen gegen 0 tendiert. Abgesehen davon kommt man um die IP ohnehin nicht ganz herum, da man ja wie oben erwähnt, kaum alle crawler und bots mit erfassen möchte.
pRiMUS hat geschrieben: |
2. warum die überfälligen daten aus der db entfernen, man könnte somit auch noch rausfiltern wie oft der benutzer sich angemeldet hat und statistiken wann er meistens online ist. |
Wenn es ein System mit Anmeldung gibt, also das Problem der Erkennung von re-visits elegant aus dem Weg geräumt ist, ja. Das Snippet in meinem ersten Post ist nicht als copy&paste zu verstehen, sondern als Grundlage auf der man aufbauen kann - ich würde es so auch nciht verwenden.
pRiMUS hat geschrieben: | 3. verwende bitte niemals die php datums funktionen, wenn mysql die selbst und sogar besser beherrscht. vor allen dingen dann nicht, wenn du versuchst den timestamp als varchar (so sieht es im moment aus) ablegen willst. zeit und datums einträge sollten im spalten format date oder besser datetime angelegt werden, um dann a) damit rechnen zu können und b) querys darauf abzusetzen. |
Ich mache noch viel dümmere Dinge damit... zerschneiden und in verschiedene INT Felder packen
..aber danke für die netten Tipps
|
|
|
|
|
|
|
|
Ähnliche Themen |
Suche Script zur Information der User
[PHP] Online-User Anzeige
Script für Online Bildershop
Suche: Online HTML-Editor (bzw. Script)
Font in MS User Interface Office 2010 gesucht
PopUp Script gesucht
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|