Userzahl Online / Max Online ausgeben

aargau

Erfahrenes Mitglied
Wie ich die Aktuelle Onlinezahl ausgebe ist mir eigentlich klar. Doch wie ich die Max Onlinezahl Ausgeben kann hab ich keine ahnung.

Ich habe ein Usermanagement Programmiert. d.H. in einer My SQL Datenbank stehen alle Benutzerinfos. in der Spalte lastonline steht die letzte aktive Zahl.

Nun hab ich aber keine Ahnung wie ich lastarm ausgeben kann wie viele User Max Online waren. Mir ist nur die möglichkeit bekannt bei jedem Seitenaufruf die aktuelle AZ Online User auszulesen und diese dann wiederherum in eine Tabelle zu Speichern. Kann ich das ev. etwas lastarmer machen? z.B. nur alle 10min Ausführen?
 
Du kannst die Anzahl der aktuellen User mit der Anzahl der maximalen User vergleichen.
Wenn die Anzahl der aktuellen User größer ist als die Anzahl der maximalen User, wird diese zur neuen Anzahl maximaler User und dann in der DB oder sonstwo gespeichert.
 
Zuletzt bearbeitet:
Erstellst einfach ein script das immer die aktuelle Anzahl der leute mit dem Rekord überprüft und wenn der jetzige wert größer(-gleich) dem vom rekord wird dann wird der rekord einfach in eine tabelle in der mysql datenbank neu geschrieben :)
 
Naja eben soweit war ich auch schon. Doch die Aktuell Online Zahl wird nur auf einer Seite angezeit. Da ja auf dieser Seite nicht immer ein User vorbeischaut, hab ich ja dann nicht die aktuelle Zahl.

Wenn ich dann dieses Script bei jedem Seitenaufaufruf öffne braucht es einfach viel zu viel Last für eigentlich nichts.

Wie kann ich also einfach sagen das er das Script nur alle 10min ausführt?
Gibt es da irgend eine Funktion in PHP?
 
Kannst ja schauen, ob die aktuellen Minuten durch 10 teilbar sind.

Aber ich frage mich dann schon, warum die Anzahl der maximalen User auf anderen Seiten verfügbar sein soll, wenn die Anzahl der aktuellen User nur auf einer ganz bestimmten Seite gezählt wird!?

PHP:
if((int)date(i) % 10 == 0) {

  // Code ausführen ..

}
 
Zuletzt bearbeitet:
Kannst ja schauen, ob die aktuellen Minuten durch 10 teilbar sind.

Aber ich frage mich dann schon, warum die Anzahl der maximalen User auf anderen Seiten verfügbar sein soll, wenn die Anzahl der aktuellen User nur auf einer ganz bestimmten Seite gezählt wird!?

PHP:
if((int)date(i) % 10 == 0) {

  // Code ausführen ..

}

Wäre es dann nicht zwingend erforderlich, dass man das Skript pünktlich zu 00:00, 00:10, 00:20 usw. ausführt, damit es wirklich anspringt?
Wenn er es wirklich alle 10 Minuten ausführen will, dann wäre es am günstigsten das Skript auszulagern und einen Cronjob einzurichten.
Oder noch einfacher wäre es, das leicht modifizierte, ausgelagerte Skript in eine Endlosschleife zu setzen und es dann über Konsole / Terminal in einen Hintergrundprozess zu setzen (*nix: nohup / screen)
PHP:
<?php
while(true){
  /* Dein Skript - möglichst ohne direkte Aus-/Rückgaben */
  sleep(600);
}
?>
Code:
nohup /usr/bin/php /home/aargau/mein_benutzer_skript_dingen.php &
 
Zuletzt bearbeitet:
Hi,

ich nehme mal an, dass ein User als online gilt, wenn seine letzte Aktivität nicht länger als n Sekunden zurückliegt. Da du ja jede Aktivität eines Users in der DB verzeichnest (nehme ich zumindest auch an), kannst du ja nach der Aktualisierung des Timestamps eine Abfrage machen, die dir die momentane Anzahl aller Online-User gibt, und diese Zahl dann mit dem Rekord vergleichen und diesen dann evtl. auch gleich updaten.
Da nicht jeder Webmaster die Möglichkeit hat auf eine Konsole seines Servers zugreifen zu können, ist das die einzige Möglichkeit neben dem Cronjob. Beim Cronjob würde ich dann als Aufrufintervall alle n Sekunden (s.o.) angeben. Alles was größer ist, macht ja keinen Sinn, da dass den Wert "verfälschen" könnte. Die Wahl des Algorithmus fällt natürlich abhängig davon, wie viele User du gleichzeitig auf deiner Seite erwartest.

Grüße, Erik.
 
Ein User zäählt als Online wenn er in den letzten 15min Aktiv war. Allso denke ich dieses Script alle 10min auszuführen wäre schon eine Idee. Gibt es ev. irgend welche Programme welche ich Serverseitig einsetzen kann um solche Statistiken gar Grafisch festzuhalten?

Habe übrigens ein Win 2k3 Server im moment...
 
So, nun hab ich mal was zusammengebastelt... Dies ist natürlich nicht ganz genau, da ja theoretisch ein 10user in der selben Sekunden Online sein könnten, das Script aber erst 2min später aufgerufen wird wenn alle 10 schon lange wieder weg sin, allso das Script niemand mehr öffnet :)

PHP:
if($_SESSION["user_id"])
{ 
// User
$time = time() ;
$read = fopen("online.txt","r");
   while (!feof($read)) {
$zeile = fgets($read,1000);
}

if($time - $zeile > 300)
{
$onlineus = time() - 900 ; 
$result = mysql_query("SELECT lastonline FROM benutzer WHERE lastonline  > '$onlineus'");
$last15 = mysql_num_rows($result) ;
$monat = date("m") ;
$jahr = date("Y") ;
mysql_query("INSERT INTO maxonline ( wieviel, zeit, monat, jahr ) VALUES ( '$last15', '$time', '$monat', '$jahr' )") ;
$text = $time ; 
 $dateiname = "online.txt"; 
 $handler = fOpen($dateiname , "w");
 fWrite($handler , $text); 
 fClose($handler); 
}

Falls Ihr etwas verbessern würdet so Schreibt das bitte
 
Zurück