Zum Inhalt springen

who is online

Erstellt am 6. Juli 2005 · Noch keine Antworten

Tags: PHP, Frage

lexus_mod ·

Hallo,

ich habe ein Script für eine who is online Abfrage welche auch Außerhalb von Typo3 Funktioniert.

Binde ich das Script in Typo3 ein mit:

#PHP Files
#tt_content.script >
tt_content.script = CASE
tt_content.script {

key.field = select_key
whoisonline = PHP_SCRIPT_EXT
whoisonline.file = fileadmin/whoisonline.php
}
passiert nichts keine Rückmeldung, weder fehler noch sonstiges, rein gar nichts.

Binde ich das Script mit "Standard PHP Script"
ein wird die IP des Webservers verwndet d.h. es ist immer ein User online ich brauche die IP der Users.

wie behebe ich das?

hir das Script:
whoisonline.php

<?php
// einbinden der Datei zum Zählen der Besucher, die Online sind
require 'user_online.php';

// diesen Besucher zählen
zaehle_besucher ($_SERVER['REMOTE_ADDR']);
?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Titel der Seite</title>
</head>
<body>
<?php $anz_besucher = anzahl_besucher(); ?>
<p>Es
<?php if ($anz_besucher == 1) { ?>
ist
<?php } else { ?>
sind
<?php } ?>
im Moment <?php echo $anz_besucher ?> Besucher online.</p>
</body>
</html>

user_online.php
<?php
// zählt den aktuellen Besucher
function zaehle_besucher ($ident) {
// hole die Liste
$liste = hole_besucher_liste ();

// füge das aktuelle Identifikationskriterium mit aktuellem Datum hinzu
$liste[$ident] = time ();

// schreibe die Liste
schreibe_besucher_liste ($liste);
}
########
// holt die Liste aus einer Datei
function hole_besucher_liste () {
// importiere die Konfiguration
global $besucher_online_konfiguration;

// lese datei
$zeilen = file ($besucher_online_konfiguration['datei']);

// fehler?
if (!is_array ($zeilen)) {
return array ();
}

$ergebnis = array ();
// gehe die Zeilen durch
foreach ($zeilen as $zeile) {
// trenne Identifikationskriterium von Zeitstempel
list ($ident, $stempel) = explode ('|', $zeile, 2);
// wenn Identifikationskriterium leer ist, dann übergehen
if (empty ($ident)) {
continue;
}

// wenn stempel zu alt ist
if ($stempel < time() - $besucher_online_konfiguration['zeitlimit']) {
// übergehen
continue;
}

// füge zum Ergebnis hinzu
$ergebnis[$ident] = (int)$stempel;
}
return $ergebnis;
}
#############
// schreibe die Liste zurück
function schreibe_besucher_liste ($liste) {
// importiere die Konfiguration
global $besucher_online_konfiguration;

$ergebnis = '';
// gehe die Liste durch
foreach ($liste as $ident => $stempel) {
$ergebnis .= "$ident|$stempel\n";
}

// öffne datei
$datei = fopen ($besucher_online_konfiguration['datei'], 'w');

// Fehler?
if (!is_resource ($datei)) {
return false;
}

// schreibe das ergebnis
$cnt = fwrite ($datei, $ergebnis);

// fehler?
if ($cnt === false) {
fclose ($datei);
return false;
}

// schließe die Datei
fclose ($datei);

// wir sind fertig
return true;
}

###########
// gibt die Anzahl der Besucher zurück
function anzahl_besucher () {
return count (hole_besucher_liste ());
}

#########
// Konfiguration
$besucher_online_konfiguration = array (
// in welcher Datei soll es gespeichert werden
'datei' => 'besucher_online.txt',
// wie lange soll es dauern, bis ein Eintrag verfällt
'zeitlimit' => 300 // 5 Minuten
);
?>