User online

Könnte mir jeman dkurz einen Wink geben wie ich eine Anzeige in der alle user die ONLINE sind angezeigt werden?
Anmeldung löse ich mit einer Sessionvariable die entweder vorhanden - angemeldet - oder nicht - nicht angemeldet - vorhanden ist...

Ich hab da leider keine Erfahrung...hab da mit der Idee gespielt,dass jeder User der online ist sich gleichzeitig in ein online-file schreibt, aber das ist ja blödsin, da das abmelden dann nicht so hinhaut wenn jemand zB einfach die Seite wegixelt....oder?
 
PHP:
<?
    $access = time()-60;
    $file = "daten.txt";
    $time = time();
    $online = 0;
    $ip=getenv("REMOTE_ADDR");
    $array = @file($file);
        for($x=0; $x<count($array); $x++){
            $array2 = explode("|", $array[$x]);
        if(in_array($ip, $array2)){
            $check = true;
            $array2[1] = $time."\n";
            }
            $array[$x] = join("|", $array2);
        }
    $array = join("", $array);
        if($check == true){
            $fp = fopen($file, "w");
            fputs($fp, $array);
            fclose($fp);
        } else {
            $fp = fopen($file, "w");
            fputs($fp, $array."\n".$ip."|".$time);
            fclose($fp);
            }
        $array = @file($file);
        for($x=0; $x<count($array); $x++){
            $array2 = explode("|", $array[$x]);
        if($array2[1] >= $access){
            $online++;
            }
        }
    // Ausgabe
    echo "<div style=\"position:absolute; margin-left:-4; margin-top:-26;\"><h4>$online</h4></div>";
?>

Hab' ich von nem Kumpel noch rumliegen gehabt, der es wiederum irgendwo im Internet gefunden hat :D
Google benutzt ?!

Mit freundlichen Grüßen

0wnZ
 
Oder Versuchs mal hiermit.

PHP:
<?

/////////////////////////////////////////
// Counter + Reloadsperre v1.0
/////////////////////////////////////////

// 0=keine Reloadsperre, 1=Reloadsperre
$aktiv = 1;
// Zeit der Reloadsperre in Minuten
$zeit = 1;
// IP-Datei
$ipdatei = "ips.txt";
// Counterdatei
$datei = "counter.txt";
// Anzahl der führenden Nullen
$stellen = 5;
// Festlegen der Bild-Dimensionen
$breite="15";
$hoehe="19";

/////////////////////////////////////////
// IP-Reloadsperre
/////////////////////////////////////////

function pruf_IP($rem_addr) {
  global $ipdatei,$zeit,$anzahl;
  @$ip_array = file($ipdatei);
  $reload_dat = fopen($ipdatei,"w");
  $this_time = time();
  $anzahl = count($ip_array);
  for ($i=0; $i<$anzahl; $i++) {
    list($ip_addr,$time_stamp) = explode("|",$ip_array[$i]);
    if ($this_time < ($time_stamp+60*$zeit)) {
      if ($ip_addr == $rem_addr) {
        $gefunden=1;
      }
      else {
        fwrite($reload_dat,"$ip_addr|$time_stamp");
      }
    }
  }
  fwrite($reload_dat,"$rem_addr|$this_time\n");
  fclose($reload_dat);
  return ($gefunden==1) ? 1 : 0;
}


/////////////////////////////////////////
// Counter-Abfrage
/////////////////////////////////////////

if (file_exists($datei) && ($aktiv==0 || ($aktiv==1 && pruf_IP($REMOTE_ADDR)==0))) {
  // Falls die Datei existiert, wird sie ausgelesen und
  // der dort enthaltene Wert um Eins erhöht.
  $fp=fopen($datei,"r+");
  $zahl=fgets($fp,$stellen);
  $zahl++;
  rewind($fp);
  flock($fp,2);
  fputs($fp,$zahl,$stellen);
  flock($fp,3);
  fclose($fp);
}else if (!file_exists($datei) && ($aktiv==0 || ($aktiv==1 && pruf_IP($REMOTE_ADDR)==0))) {
  // Die Datei counter.txt existiert nicht, sie wird
  // neu angelegt und mit dem Wert 1 gefüllt.
  $fp=fopen($datei,"w");
  $zahl="1";
  fputs($fp,$zahl,$stellen);
  fclose($fp);
} else {
  // Die Datei existiert zwar, jedoch handelt
  // es sich wahrscheinlich um den gleichen Besucher
  $fp=fopen($datei,"r");
  $zahl=fgets($fp,$stellen);
  fclose($fp);
}
    
$zahl=sprintf("%0".$stellen."d",$zahl);

?>

Müsstest du auch in jedem guten php-Buch finden. ;)
 
Ich glaube da gibts ein leichts Missverständniss. Die normalen Online Counter kenn ich schon, dass ist ja nicht so schwer zu finden.
Aber ich bruach ein Teil dass mir die User die angemeldet sind - also sich eingeloggt haben - zeigt, und zwar per Namen.

Die obigen scripte zeigen einem ja nur generell wie viele leude online sind, so weit ich verstehe
 
Die Nutzer stehen doch sicherlich irgendwo in einer Datenbank. Ergänze die einfach um ein Feld "last_action", in dem du einen Timestamp einträgst, wann sie das letzte Mal eine Seite aufgerufen haben. Dann includest du auf jeder deiner Seiten eine Funktion, die dieses Datenbankfeld mit der aktuellen Uhrzeit befüllt, wenn sie eine Seite aufrufen.

Die Anzeige selbst sucht dann einfach nur alle Nutzer aus der Datenbank, die innerhalb der letzten X Minuten eine Aktion ausgeführt haben und gibt die mit Namen zurück. Sollte recht einfach zu implementieren sein.
 
Zurück
Oben