Live-Chat in PHP: Was auf normalem Webhosting funktioniert
Ein Live-Chat braucht keinen Node-Server. Wie ein Chat auf gewöhnlichem PHP-Webhosting arbeitet, was er speichern muss und wie Sie ihn gegen Spam schützen.
Ein Live-Chat für die eigene Website läuft auch auf einem gewöhnlichen PHP-Webhosting. Er braucht dafür keinen WebSocket-Server und kein Node.js. Er fragt den Server alle paar Sekunden nach neuen Nachrichten. Das klingt altmodisch, ist auf geteiltem Webspace aber der Weg, der überall funktioniert.
Die meisten Anleitungen zu „live chat php“ beginnen mit WebSockets. Das passt zu einem eigenen Server. Auf einem Webhosting-Paket passt es meist nicht, und dieser Artikel erklärt, warum, und was stattdessen geht.
Warum WebSockets auf Webhosting schwierig sind
Auf einem Webhosting-Paket läuft PHP nur, solange eine Anfrage dauert. Die Seite wird gebaut, ausgeliefert, und der Prozess ist fertig. Ein WebSocket-Server ist das Gegenteil: ein Programm, das dauerhaft läuft und Verbindungen offen hält. So einen Dienst können Sie auf geteiltem Webspace meist nicht starten.
Server-Sent Events wären der Mittelweg. Dabei hält ein PHP-Skript die Verbindung offen und schickt Nachrichten, sobald sie da sind. Jeder offene Chat belegt dann aber einen PHP-Prozess, und viele Pakete begrenzen, wie viele davon gleichzeitig laufen. Ist die Grenze klein, bremsen schon wenige offene Chats die ganze Website aus.
Abfragen in kurzen Abständen
Bleibt die einfache Lösung: Der Browser fragt alle paar Sekunden nach, ob etwas Neues da ist. Jede Anfrage ist kurz, und der PHP-Prozess ist danach wieder frei. Das läuft auf jedem Hosting, das PHP ausführt.
Drei Dinge halten die Last klein. Erstens fragt der Chat erst, wenn der Besucher etwas geschrieben hat. Wer die Seite nur ansieht, löst keine einzige Abfrage aus. Zweitens pausiert die Abfrage, solange der Tab im Hintergrund liegt, und holt beim Zurückkommen sofort nach. Drittens holt jede Abfrage nur die Nachrichten seit der letzten bekannten Nummer, nicht das ganze Gespräch.
Bei vier Sekunden Abstand erscheint eine Antwort etwa vier Sekunden nach dem Absenden, oft schneller. Für einen Support-Chat reicht das.
Wo die Gespräche liegen
Ein Chat muss das Gespräch speichern, sonst ist es nach dem Neuladen weg. Eine MySQL-Datenbank müssen Sie dafür nicht einrichten. SQLite ist bei vielen PHP-Installationen schon dabei und legt alles in eine einzige Datei. Fehlt SQLite, genügt eine Datei, die beim Schreiben gesperrt wird, damit sich zwei gleichzeitige Nachrichten nicht überschreiben.
Diese Datei gehört nicht ins Web-Verzeichnis. Liegt sie eine Ebene darüber, kann sie niemand über eine Adresse abrufen. In einem Chat schreiben Besucher Namen, E-Mail-Adressen und Bestellnummern. Deshalb sollte die Datei zusätzlich verschlüsselt sein und nur für PHP lesbar.
Spam und fremde Zugriffe
Ein offenes Chatfeld zieht Bots an. Ein verstecktes Formularfeld, das Menschen nicht sehen und Bots ausfüllen, fängt einen guten Teil ab. Dazu kommt eine Grenze je IP-Adresse, wie viele Gespräche und Nachrichten in ein paar Minuten möglich sind.
Die Ansicht, in der Sie antworten, braucht einen eigenen Schutz. Ein Schlüssel, den der Server nur als Hash speichert, und eine Sperre nach mehreren Fehlversuchen halten Rateversuche auf.
Was Sie vorher prüfen sollten
Ihr Hosting braucht PHP 7.0 oder neuer mit den Erweiterungen openssl und curl. PHP muss eine Ebene über dem Web-Verzeichnis einen Ordner anlegen dürfen. Ob das geht, sehen Sie im Dateimanager Ihres Hosters: Liegt Ihre Website in einem Unterordner wie httpdocs oder public_html, ist darüber meist Platz.
So macht es wg_chat
Unser Support-Chat wg_chat ist genau so gebaut. Er fragt alle vier Sekunden nach, frühestens nach der ersten Nachricht und nicht bei verstecktem Tab. Die Gespräche liegen AES-256-verschlüsselt in SQLite oder einer Datei, im Ordner wgdata/wg_chat über Ihrem Web-Verzeichnis. Darf PHP den Ordner nicht anlegen, nennt der Chat beim Einrichten den Pfad. Je IP-Adresse sind 6 neue Gespräche und 20 Nachrichten in 5 Minuten möglich, die Antwort-Ansicht sperrt nach 8 Fehlversuchen für 15 Minuten. Im Browser des Besuchers liegt nur eine signierte Gesprächs-Kennung.
Eingebunden wird er mit einer Zeile PHP, wie in Widgets mit PHP direkt ins HTML rendern beschrieben. Er kostet 4,99 € einmalig, ohne Abo. Die Demo auf der Themenseite speichert nichts und zeigt, wie es sich für Besucher anfühlt.
Widget Storm ausprobieren
Die Widgets laufen als Live-Demo direkt auf der Seite. Öffentliche Widgets können registrierte Nutzer frei in eigene Projekte einbinden.
Widgets ansehen Support-Chat ohne iframe: 4,99 € einmalig
Gesamtpreis · gemäß § 19 UStG keine USt