Einfacher AJAX-Chat mit Prototype

Heute programmiert: Ein einfacher Chat in einer einzigen PHP-Datei. Ohne Benutzerverwaltung, mit nur einem Passwort und mit einfachen Textdateien zur Benutzer- und Nachrichtenspeicherung.

Alles was benötigt wird ist ein Webserver der PHP unterstützt und die Prototype-Javascript-Bibliothek. Diese wird von der PHP-Datei eingebunden und für den Chat benutzt. Die Datei muss „prototype.js“ heißen und im gleichen Verzeichnis wie die PHP-Datei liegen. Prototype kann hier herunter geladen werden und ist in dem ZIP-Paket _nicht_ enthalten.

Da die AJAX-Calls alle zwei Sekunden laufen wenn der Chat aktiv ist, kann es bei vielen gleichzeitigen Benutzern zu einer ziemlichen Serverlast kommen. Also bitte mit Bedacht einsetzen oder die Werte entsprechend hochschrauben im Code.

Natürlich ist das Programm unter der GPL-Lizenz und xHTML 1.0 Strict valide 😉

Viel Spaß beim Antesten: Download Exanto Webchat

Screenshot:

Exanto Webchat

25 Kommentare

  1. Hallo,

    ja, es geht einfach über „Enter“. Bei mir hat das immer geklappt. Der Austausch der Nachrichten findet über eine Datei auf dem Server statt, und neue Nachrichten werden über einen Timestamp-Vergleich ermittelt.

    Grüße,
    Ingo

  2. Hi Christian,
    die Frage ist etwas zu allgemein um sie mal eben zu beantworten 😉 Vielleicht willst du erstmal pauschal etwas über OOP lernen? Dazu kann ich dir das Openbook Praxisbuch Objektorientierung von Galileo Press empfehlen. Es ist kostenlos und sehr gut zum „Einstieg“.

    Grüße,
    Ingo

  3. Bei mir geht bei IE aber bei Firefox 2.0.0.4 tut nichts. Ich bekomme kein fehler meldung auch keine Javascript feher nur „Server nicht gefunden“

  4. hi. coole sache. nur bei mir ist das script absolut nicht usable. als test habe ich mal „hallo“ eingegeben. jetzt kommt alle 2 sekunden die erneute ausgabe von „hallo“ in der box.
    für mein verständnis sollte das nur 1x kommen, oder?
    alex

  5. Dasselbe Problem habe ich auch. Wo liegt der Fehler? Es ist so, dass die User erst auf einmal aus der Liste verschwinden und dann der text immer wieder ausgelesen und doppelt angezeigt wird, scheint aber am Ajax/Javascript Teil zu liegen. Könnte mir da jemand weiterhelfen?

    Danke!

  6. frage wenn ich mich in den chat einloggen will muss mann sich anmelden und passwort eingeben ja aber vorher muss mann sich ja regestrieren ja aber nur wo und dann steht darunter unter anmelden „fehler bei der anmeldung“ kann mir da jemand hefen

  7. Hallo marco,

    das Passwort ist immer gleich, das ändert man einfach in der Quelldatei des Chats. Es gibt keine Benutzerregistrierung bei dem Chat, ist eben nur ein einfaches Programm.

  8. Naja hab irgendwie das selbe problem.. wie soll man bei der Anmeldung erstmals in den chat kommen?
    Laut php code

    ist das Passwort : PASSWORD ?

    Und der username!?

  9. Ups soory das ich Spame seh eben das ist ne Konstante also das passwort lautet Webchat nicht PASSWORD.. und der Username ist egal

  10. Ich wollte diesen Chat mal auf XAMPP testen. Allerdings kann ich mich nicht einloggen. In der Quelldatei finde ich nur einen Verweise auf eine user.txt welche nicht existiert. Wie ist diese aufgebaut? Danke!

  11. Diese Funktion muß ersetzt werden. Das behebt den Fehler, daß die Nachricht alle 2 Sekunden auftaucht – außerdem solltet ihr die Wiedholfrequenz in dem Ajax Code auf 6 Sekunden setzen – Viel Spaß

      function get_messages($timestamp) {
        if (!file_exists(CHAT_FILE)) { die; }
        $data = file(CHAT_FILE);
        foreach ($data as $line) {
          $chunks = explode("\t", $line);
          $get = explode(".", $chunks["0"]);
          if ($get["0"] < time() - 6) {
          } else {
          //only fetch messages that were written after last user action
          if ($chunks[0] > $timestamp) { $new_msgs[] = $chunks[1]; }
          }
        }
        if (!is_array($new_msgs)) { $new_msgs = array(); }
        //update last_action of user
        update_last_action(microtime_float(), $_SESSION['username']);
        //return nicely formatted html
        $html = false;
        foreach ($new_msgs as $msg) {
          $html .= '<p>'.$msg.'</p>';
        }
        return $html;
      }
    

    Wiederhol Frequen auf 6 Sekunden :s

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert