Online-Benutzeranzeige in PHP

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

      Online-Benutzeranzeige in PHP

      Produkt: Online-Benutzeranzeige in PHP

      Version: 1.0

      Editor: Matzelix

      Entwickler: Matzelix

      Entwicklungsjahr: 2006

      Benötigte Ressourcen: -

      Alternative Ressourcen: -

      Screen Shots: -


      Beschreibung:

      Ich habe vor längerer Zeit mal ein php-script geschrieben, mit dem man die Zahl der registrierten Benutzer, die Zahl der Online-Benutzer und die Namen der Benutzer nach Räumen aufgeteilt darstellen kann, ohne dabei die chat.pl und die template Engine zu benutzen. Dadurch kann man die Zahl der gestartenen Prozesse der chat.pl verringern, besonders dann, wenn man viele externe Anzeigen über den Chat auf seiner Website eingebaut hat. Es kann also die Belastung des Servers verringern, wenn man eine gut besuchte Website hat mit eingebauter Chat-Online-Anzeige.

      <?php
      function lese_dateien($path)
      {
      $result = array();

      $handle = opendir($path);

      if ($handle)
      {
      while (false !== ($file = readdir($handle)))
      {
      if ($file != "." && $file != "..")
      {
      if (strstr ( $file, '.user' ) )
      {
      $name = $path . "/" . $file;
      $result[] = $name;
      }
      }
      }
      }
      closedir($handle);
      return $result;
      }

      function lese_raeume($path)
      {
      $result = array();

      $handle = opendir($path);

      if ($handle)
      {
      while (false !== ($file = readdir($handle)))
      {
      if ($file != "." && $file != "..")
      {
      if (strstr ( $file, '.dat' ) )
      {
      $name = $path . "/" . $file;
      $result[] = $name;
      }
      }
      }
      }
      closedir($handle);
      return $result;
      }
      $memberlistfile = file ('/srv/www/htdocs/web1/html/cgi-bin/gtchat95/Members/memberlist.txt');
      $membercount = count ($memberlistfile);
      echo "<b>" . $membercount . "</b> registrierte Benutzer<br />\n";

      $onlineusers = lese_dateien("/srv/www/htdocs/web1/html/cgi-bin/gtchat95/Online");
      $onlineusercount = count($onlineusers);
      $rooms = lese_raeume("/srv/www/htdocs/web1/html/cgi-bin/gtchat95/Rooms");

      $roomprivate = array();
      $roomname = array();
      foreach($rooms as $value)
      {
      $roomfile = file ( $value );
      $roomfile = str_replace(chr(10), '', $roomfile);
      $roomkey = strtolower($roomfile[0]);
      $roomprivate[$roomkey] = $roomfile[2];
      $roomname[$roomkey] = $roomfile[0];
      }
      echo "<b>" . $onlineusercount . "</b> Benutzer online<br />\n";
      echo "<br />";
      echo "Wer ist wo im Chat:<br />\n";
      echo "<hr />";
      if ($onlineusercount == 0)
      echo "kein Benutzer online<br />\n";
      $roomusercount = array ();
      $roomusers = array();
      foreach($onlineusers as $value)
      {
      $onlinefile = file ( $value );
      $onlinedata = $onlinefile[0];
      $a = explode ("|", $onlinedata );
      $roomusercount[$a[3]]++;
      $roomusers[$a[3]][$a[2]] = $a[2];
      }
      $roomcount = count($roomusercount);
      natcasesort ($roomusers);
      $nonprivatusers = false;
      foreach($roomusers as $users)
      {
      $raum = key($roomusers);
      if (!$roomprivate[$raum])
      {
      $nonprivatusers = true;
      echo "<b>" . $roomname[$raum] . ":</b>(" . $roomusercount[$raum] . "/". $onlineusercount . ") <br />\n";
      next($roomusers);
      natcasesort ($users);
      foreach ($users as $benutzer)
      {
      echo $benutzer . "<br />\n";
      }
      }
      }
      if (!$nonprivatusers and $onlineusercount != 0)
      echo "Keine Benutzer in den <br />öffentlichen Räumen...<br />\n";
      echo "<hr />";
      ?>


      Dieses Script benutze ich jetzt schon mehr als ein halbes Jahr und hatte eigentlich keine Probleme damit. Im Prinzip müsst ihr nur die folgenden Pfade im Programmtext anpassen:

      $memberlistfile = file ('/srv/www/htdocs/web1/html/cgi-bin/gtchat95/Members/memberlist.txt');

      $onlineusers = lese_dateien("/srv/www/htdocs/web1/html/cgi-bin/gtchat95/Online");

      $rooms = lese_raeume("/srv/www/htdocs/web1/html/cgi-bin/gtchat95/Rooms");


      Die Einbindung könnte, wenn man das o.g. Script als "chatinfo.php" den Webspace lädt, wie folgt aussehen:

      <?php include('gtchat95/chatinfo.php'); ?>


      Eine Variante des o.g. Script für die Einbindung mit javascript könnte so aussehen:

      <?php
      function lese_dateien($path)
      {
      $result = array();

      $handle = opendir($path);

      if ($handle)
      {
      while (false !== ($file = readdir($handle)))
      {
      if ($file != "." && $file != "..")
      {
      if (strstr ( $file, '.user' ) )
      {
      $name = $path . "/" . $file;
      $result[] = $name;
      }
      }
      }
      }
      closedir($handle);
      return $result;
      }

      function lese_raeume($path)
      {
      $result = array();

      $handle = opendir($path);

      if ($handle)
      {
      while (false !== ($file = readdir($handle)))
      {
      if ($file != "." && $file != "..")
      {
      if (strstr ( $file, '.dat' ) )
      {
      $name = $path . "/" . $file;
      $result[] = $name;
      }
      }
      }
      }
      closedir($handle);
      return $result;
      }

      $memberlistfile = file ('/srv/www/htdocs/web1/html/cgi-bin/gtchat95/Members/memberlist.txt');
      $membercount = count ($memberlistfile);
      echo 'document.write("<b>' . $membercount . '</b> registrierte Benutzer<br>");' . "\n";

      $onlineusers = lese_dateien("/srv/www/htdocs/web1/html/cgi-bin/gtchat95/Online");
      $onlineusercount = count($onlineusers);
      $rooms = lese_raeume("/srv/www/htdocs/web1/html/cgi-bin/gtchat95/Rooms");
      $roomprivate = array();
      $roomname = array();
      foreach($rooms as $value)
      {
      $roomfile = file ( $value );
      $roomfile = str_replace(chr(10), '', $roomfile);
      $roomkey = strtolower($roomfile[0]);
      $roomprivate[$roomkey] = $roomfile[2];
      $roomname[$roomkey] = $roomfile[0];
      }
      echo 'document.write("<b>' . $onlineusercount . '</b> Benutzer online<br><br>Wer ist wo im Chat:<br><hr>");' . "\n";
      if ($onlineusercount == 0)
      echo 'document.write("kein Benutzer online<br>");' . "\n";
      $roomusercount = array ();
      $roomusers = array();
      foreach($onlineusers as $value)
      {
      $onlinefile = file ( $value );
      $onlinedata = $onlinefile[0];
      $a = explode ("|", $onlinedata );
      $roomusercount[$a[3]]++;
      $roomusers[$a[3]][$a[2]] = $a[2];
      }
      $roomcount = count($roomusercount);
      natcasesort ($roomusers);
      $nonprivatusers = false;
      foreach($roomusers as $users)
      {
      $raum = key($roomusers);
      if (!$roomprivate[$raum])
      {
      $nonprivatusers = true;
      echo 'document.write("<b>' . $roomname[$raum] . ':</b>(' . $roomusercount[$raum] . '/'. $onlineusercount . ') <br>");' . "\n";
      next($roomusers);
      natcasesort ($users);
      foreach ($users as $benutzer)
      {
      echo 'document.write("' . $benutzer . '<br>");' . "\n";
      }
      }
      }
      if (!$nonprivatusers and $onlineusercount != 0)
      echo 'document.write("Keine Benutzer in den <br>öffentlichen Räumen...<br>");' . "\n";
      echo 'document.write("<hr>");'. "\n";

      ?>



      Auch hier müssen die folgenden Zeilen an den eigenen Server / Webspace angepasst werden:

      $memberlistfile = file ('/srv/www/htdocs/web1/html/cgi-bin/gtchat95/Members/memberlist.txt');

      $onlineusers = lese_dateien("/srv/www/htdocs/web1/html/cgi-bin/gtchat95/Online");


      $rooms = lese_raeume("/srv/www/htdocs/web1/html/cgi-bin/gtchat95/Rooms");


      Wenn man das o.g. Script z.b. als "chatinfo_js.php" in den www Ordner des GTChats auf den Webspace lädt, dann kann man die Anzeige z.B. auf die folgende Weise einbinden:

      <script language="JavaScript" src="http://deine-domain.tld/gtchat95/chatinfo_js.php" type="text/javascript"></script>


      ----------------------------

      Viel Spaß damit wünscht das GTChat-Developer.com - Team!

      Zum Eintrag in der Datenbank
      Ich habe es soweit befolgt was drin steht nur problem ist, er zeigt zwar an das jemand Online ist nur nicht "wer"

      Ich würde es gerne in das JGS-XA Portal einbinden, es reicht eigentlich aus wenn nur drin steht "wieviele" online sind und Optimal wäre noch "wer"

      Wäre das damit umsetzbar?
      ich habs im ie

      und ich sage das weil:

      er zeigt immer 1 benutzer an, egal ob du den pfad zur memberlist änderst oder nicht, also auch pfade die gar nicht existieren

      zweitens habe ich die variable vorher auf null gesetzt, zeigt er immer noch 1 an, egal ob der pfad stimmt oder nicht

      deswegen muss was in einem array, einer variable oder count nicht stimmen

      nachtrag: ich habe die php-variante genommen, ich teste das noch mit der javascript

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Joergoletto“ ()

      gut, ist nicht wichtig für mich, aber ich habs halt versucht.
      also ich kriegs nicht hin, egal welche version ich nehme. das ergebnis bleibt immer dasselbe:

      1 registrierter benutzer
      0 benutzer online
      wer ist wo im chat
      kein benutzer online

      aber ähnliches problem hatte ich glaube auch schon auch mit dem geburtstagsscript, das wollte auch nicht. aber wie dem auch sei, für mich ist das thema erledigt.. hatte nur grad nix bessres zu tun. merci
      Nabend auch!

      Bei mir das gleiche ...

      1 Registrierter und sonst nada ...

      Aber gabs da nicht auch nen anderen Weg die Online-User auf einer beliebigen Seite anzeigen zu lassen? Manchmal direkt über die chat.pl ?

      Ich hatte mal was ähnliches in meinem Forum drinnen - habs aber vor dem Upgrade desselben nicht gesichert, und nun hab ich den Code nümmer.

      Hat keiner nen Vorschlag für die Variante über chat.pl ?
      such dir die alte integration von wiktor für das wbb raus (falls hier nicht mehr vorhanden, dann auf v-gn.de). dort ist eine html datei drinne, die lädst du dir in deinen templates ordner (irgendwas mit online) in der anleitung steht auch der code für den einbau ins wbb2 u.s.w, dort kannst du genau sehen welche datei das ist.
      Öhm, ja danke - aber hatte ich schon erwähnt, das ich kein wbb habe? =)

      Ich hab ein vbulletin (3.7.4) aber ich hatte da mal nen Einzeiler, der in jeder HTML-Datei funktionierte ... :( Kennt den denn keiner mehr? ?(

      Ich glaub den hatte ich mal vom "bunten" Forum - aber dort machen se ja Gesichtskontrolle und meines ist wohl nicht schön genug ;) :D
      das problem an dem script ist folgendes:

      wenn dein cgi-bin-verzeichnis nicht unterhalb/innerhalb deines httpdocs oder html oder www liegt, dann funktioniert es nicht.

      grund: $path ist der ort, in dem sich das script befindet und von dem aus die pfadangabe aufgerufen wird, also im www verzeichnis

      funktionierendes beispiel

      $memberlistfile = file ('/srv/www/vhosts/xyz.de/httpdocs/cgi-bin/gtchat95/Members/memberlist.txt');

      hier funktioniert es, weil die online.php im httpdocs ist und die ordnerstruktur zum cgi-bin verfolgen kann, weil cgi-bin unterhalb vom www ist.
      ------------------------------------------------

      nicht funktionierendes beispiel

      $memberlistfile = file ('/srv/www/vhosts/xyz.de/cgi-bin/gtchat95/Members/memberlist.txt');

      kann nicht funktionieren, weil die aufrufende datei im httpdocs ist und von diesem aus dann den pfad aufruft, der so nicht funktionieren kann.


      also umbasteln. versuch es einfach zum testen, indem du die memberlist in dein www vom gtchat kopierst, ändre den pfad richtig und das script liest dann auch richtig daten aus.

      also: wenn sich cgi-bin und das www-verzeichnis im selben ordner ("auf derselben höhe") befinden, funktioniert es nicht, weil ja sich das script im www befindet und erst ein verzeichnis (../) höher aus dem httpdocs gehen müsste, damit der pfad wieder stimmen würde

      befindet sich cgi-bin innerhalb vom www, dann geht es

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Joergoletto“ ()

      Ah, danke - es wird heller ...

      Denn genau das:

      $memberlistfile = file ('/srv/www/vhosts/xyz.de/cgi-bin/gtchat95/Members/memberlist.txt');


      Ist bei mir der Fall. Cgi-bin innerhalb des www geht bei mir nicht, also muss ich umstricken. Ich setz mich da mal dran. Danke Euch!

      Und trotzdem bleibt die Frage danach:
      ...darstellen kann, ohne dabei die chat.pl und die template Engine zu benutzen. Dadurch kann man die Zahl der gestartenen Prozesse der chat.pl verringern, besonders...
      (Aus erstem Beitrag)
      Und so (eben über die chat.pl) hatte ich es bisher seit Jahren betrieben, ohne Probleme. Nur hab ich durch das Upgrade meines Forums den Codeschnipsel versemmelt...

      Wie gesagt, trotzdem schonmal danke, ich probier heut obigen Vorschlag. =)

      Ha - wer lange sucht ...

      Das suchte ich:

      Quellcode

      1. <strong><p class="gensmall">im Chat: </strong><script language="JavaScript" src="http://www.server.de/cgi-bin/gtchat/chat.pl?template=roomusers_js"></script></p>


      Anzeige dann:

      "Chat: user1, user2, user3, ..."

      Bei im Schnitt 5-20 Usern im Chat auch völlig ausreichend.

      Hier mal noch ein Hinweis, wie das ganze zB. im Modul-Template "Online_users" eines vbadvanced portal 3.0.1 ausschauen kann.
      Code:

      PHP-Quellcode

      1. <tr>
      2. <td class="thead"><span class="smallfont"><phrase 1="$numberregistered" 2="$numberguest">$vbphrase[x_members_and_y_guests]</phrase></span>
      3. </td>
      4. </tr>
      5. <tr>
      6. <td class="$altbgclass"><span class="smallfont">$activeusers </span>
      7. </td>
      8. </tr>
      9. <!-- Beginn Chatanzeige -->
      10. <if condition="$show['member']"> <!-- Nur registrierten Usern anzeigen/Gäste: raus -->
      11. <tr>
      12. <td class="$altbgclass"><span class="smallfont">Chat: <br/ >
      13. <script language="JavaScript" src="http://www.DeinServer.de/cgi-bin/gtchat/chat.pl?template=roomusers_js"></script>
      14. </span>
      15. </td>
      16. </tr>
      17. </if> <!-- Nur registrierten Usern anzeigen, wenn auch Gäste, dann raus -->
      18. <!-- Ende Chatanzeige -->
      19. <tr>
      20. <td class="$bgclass"><span class="smallfont"><phrase 1="$recordusers" 2="$recorddate" 3="$recordtime">$vbphrase[most_users_ever_online_was_x_y_at_z]</phrase> </span>
      21. </td>
      22. </tr>


      Foto:





      An einer Lösung des Scriptproblems bin ich dennoch sehr interessiert.

      Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Joachim15“ ()