Kurs:Ein Internetchat mit PHP/Ausgabe von Chattexten

Aus Wikiversity
Struktogramm zur Datei "output.php"

Das Anzeigen eines dynamisch erzeugten Textes beim Client via Webbrowser kann auf dem Server mit Hilfe der Skriptsprache PHP ermöglicht werden.

Hier wird die Ausgabe der Chatbeiträge mittels PHP behandelt.

Die Chat-Datei[Bearbeiten]

Der PHP-Server hat Zugriff auf das Dateisystem des Servers. Wenn die Chat-Beiträge in einer Datei abgelegt werden, braucht kein weiterer Service in Anspruch genommen zu werden. Als einfachste Möglichkeit bietet sich eine Textdatei an.

Wenn nun die notwendigen Informationen in der Chat-Datei pro Zeile in aufbereiteter Form vorliegen, muss nun nur noch die Zeile ausgegeben werden. Entweder ohne oder mit zusätzlicher Aufbereitung.

Die Ausgabezeilen[Bearbeiten]

Um nicht tatsächlich alle bisher gesammelten Chatbeiträge ausgeben zu müssen, sollte die Ausgabe auf die letzten darzustellenden Chatbeiträge beschränkt werden. Als Beispiel werden hier nur die letzten 40 Beiträge berücksichtigt.

Damit der Leser einen besseren Überblick hat, werden die jeweils neuesten Chatbeiträge obenangestellt.

Die Datei „output.php“[Bearbeiten]

Da PHP-Anweisungen, wie bereits im Modul Grundstruktur eines PHP-Dokuments behandelt, innerhalb von HTML Anweisungen eingebettet werden, enthält auch die Ausgabedatei ein übliches HTML-Gerüst:

HTML-Header mit Meta-Tag für automatisches Neuladen

Hier ist in der Zeile 7 eine Meta-Anweisung zu sehen, die für das regelmäßige Nachladen dieser Datei namens „output.php“ zuständig ist. Alle 5 Sekunden wird die Datei wiederholt durch den Client vom Server angefordert. Dadurch kann der jeweils aktuelle Stand der Chatbeiträge im Webbrowser des Clients dargestellt werden.

Ab Zeile 10 könnte nun die eigentliche, mittels PHP zu realisierende Programmierung eingesetzt werden.

Wo sind die Chatbeiträge?[Bearbeiten]

Eine Frage ist allerdings noch zu klären, bevor die Beiträge der Chat-Teilnehmer ausgegeben werden:

Ist die Datei mit den Chat-Beiträgen überhaupt verfügbar?

Falls nämlich bisher noch gar kein Chatbeitrag zur Verfügung steht, also die Chat-Datei noch nicht existiert, soll der Inhalt der Datei „closed.php“ aus dem Kursmodul Chat geschlossen ausgegeben werden.

Hierfür wird die Kontrollstruktur für bedingt abzuarbeitende Anweisungen if[1] verwendet. Ein solches Programmstück könnte folgendermaßen aussehen:

PHP-Code zur Existenzüberprüfung der Chat-Datei

Wenn aber die Chattext-Datei fehlt?[Bearbeiten]

Im obigen Beispiel wird in der Zeile 02 mittels des if-Schlüsselwortes eine Bedingung überprüft. Das Ergebnis des Aufrufs der PHP-Funktion file_exists[2] liefert die Information, ob die Datei namens chat.txt existiert.

Uns interessiert hier allerdings der Fall, dass diese Datei eventuell nicht existiert. Das PHP-Sprachelement für die Verneinung (Negation) ist das Ausrufungszeichen (!).

Somit beantwortet Zeile 02 die Frage, ob die Datei chat.txt nicht existiert. Sollte dies der Fall sein, dann werden die Zeilen 03 und 04 abgearbeitet. Anderenfalls würde es nach Zeile 05 weitergehen.

Wo nichts ist, muss eine Ersatzlösung her[Bearbeiten]

Da die Zeile 03 nur abgearbeitet wird, falls die Datei mit den Beiträgen der Chatteilnehmer nicht existiert, bleibt nichts anderes übrig, als einen Nutzer des Chats darüber zu informieren, dass es momentan noch nichts zu lesen gibt, also der Chat noch geschlossen ist. Da im Laufe des Kurses bereits eine Datei erzeugt wurde, die eben genau diese Information darstellen soll, wird hier mit Hilfe der PHP-Kontrollstruktur include[3] ebend diese Datei (closed.php) in die Abarbeitung eingefügt. Das Ergebnis dieser Anweisung ist somit die Ausgabe des in der Datei closed.php enthaltenen HTML-Codes an den Client - also den Webbrowser.

Wenn es weiter nichts zu tun gibt, legt man sich zur Ruh'[Bearbeiten]

Nachdem nun der Inhalt der Datei closed.php ausgegeben wurde, hat unser PHP-Programm nichts mehr zu tun. Das PHP-Schlüsselwort exit dient dazu, die Abarbeitung des Programms hier zu beenden.

Ende der Untersuchung[Bearbeiten]

Die in Zeile 05 enthaltene Klammer } schließt den Anweisungsblock der if-Anweisung aus Zeile 02.

Ausgabe der Chatbeiträge[Bearbeiten]

Im ersten HTML-Code weiter oben wurde der Bereich für die noch darzustellenden PHP-Programmanweisungen freigelassen. Die Ausgabe der bisherigen Chatbeiträge geschieht im Prinzip durch das Einlesen aller Beiträge aus der Datei chat.txt und dem Senden dieser Zeilen an den Webbrowser des Clients.

Damit der Nutzer des Chats jeweils die neuesten Chatbeiträge im Blick hat, sollen diese neuesten Zeilen jeweils als erste ausgegeben werden. Außerdem soll die Gesamtanzahl auszugebender Beiträge auf - hier zum Beispiel - 40 Zeilen beschränkt werden.

Der folgende Anweisungsblock dient diesem Ziel:

PHP-Code zur zeilenweise Ausgabe der Chatbeiträge

Chatbeiträge einlesen[Bearbeiten]

In Zeile 02 des obigen Beispiels liefert der Aufruf der Funktion für Dateizugriffe file[4] den gesamten Inhalt der Datei chat.txt. Und zwar werden alle Zeilen aus dieser Datei als Array[5] mit der Bezeichnung $chatLines gespeichert. Ein mit dem $-Symbol beginnender Name definiert in PHP eine Variable.

Neueste Beiträge zuerst[Bearbeiten]

In Zeile 03 werden die einzelnen Elemente des Arrays $chatLines (also die einzelnen Chatbeiträge) in umgekehrte Reihenfolge gebracht. Dafür wird die speziell für Arrays vorgesehene Funktion array_reverse[6] verwendet. Die nunmehr in umgekehrter Reihenfolge vorliegenden Chatbeiträge werden wiederum unter dem bereits verwendeten Namens $chatLines zwischengespeichert.

Aber nur 40 Beiträge insgesamt[Bearbeiten]

Da wir die Ausgabe der Chatbeiträge auf die neuesten 40 Zeilen beschränken wollten, muss nun noch das Array auf eben diese ersten 40 Elemente zusammengestrichen werden. Die Funktion array_slice[7] beschränkt die bisherigen Arrayelemente hier vom ersten (mit 0 referenzierten) Arrayelement auf insgesamt 40 Stück. Sollten gar nicht soviele Zeilen existieren, ist dies nicht weiter tragisch, dann bleiben es eben soviele Zeilen, wie es sind.

Zeilenweise Ausgabe einschließlich HTML-Zeilenumbruch[Bearbeiten]

Nachdem nun die Variable namens $chatLines nur noch ein Array mit maximal 40 Elementen ist (also nur noch maximal 40 Chatbeiträge im Array enthalten sind, sollen diese hier ausgegeben werden. Die speziell für Arrays existierende Kontrollstruktur foreach[8] durchläuft nun in einer wiederkehrenden Schleife die nachfolgende(n) Anweisung(en) und weist bei jedem solchen Durchlauf den Inhalt des aktuellen Arrayelements einer Variablen $line zu.

Dieser Inhalt der Variablen $line wird in Zeile 06 mit Hilfe der Zeichenkettenfunktion echo[9] ausgegeben. Die so ausgegebenen Texte landen letztendlich beim Webbrowser des Clients. Damit beim Client diese Zeilen untereinanderstehend dargestellt werden, wird hier hinter jeder Zeile noch das HTML-Tag für den Zeilenumbruch (<br />) angehängt.

Das Aneinanderreihen von Zeichenketten geschieht in PHP durch den Punkt ("."). Zeile 07 enthält hier nur noch die abschließende Klammer des gesamten foreach-Anweisungsblocks.

Aufgaben[Bearbeiten]

Aufgabe:
Die Datei output.php zur Ausgabe der Chattexte ist nun zu erstellen.

Hinweis: Die verlangte Datei muss aus den obigen Code-Abschnitten zusammengesetzt und anschließend noch der HTML-Bereich korrekt abgeschlossen werden. Die fertige Datei muss im gleichen Ordner abgelegt werden, wie auch schon die Datei closed.php.

Aufgabe:
Die Datei output.php ist nun im Webbrowser auf ihre Funktionsfähigkeit zu testen.

Hinweis: Nachdem im Kursmodul Vorbereitung zur PHP-Programmierung die Voraussetzungen für die Verwendung von PHP geschaffen wurden, muss nun nur noch die Adresse: http://localhost/output.php aufgerufen werden.

Aufgabe:
Folgende Fragen sind nun zu beantworten und gegebenenfalls zu klären:
  • Findet der Browser die gewünschte Datei?
  • Wird tatsächlich alle 5 Sekunden die Datei nachgeladen?
  • Erscheint tatsächlich die Ausschrift, dass momentan der Chat keine Daten enthält?
  • Falls Fehlermeldungen ausgegeben werden, wo kommen sie her? Wie können sie vermieden werden?
Aufgabe:
Nachdem eventuelle Fehlermeldungen behoben sind, kann nun die Datei 'chat.html' aus dem Kursmodul Zweireihiges Frameset in den Webbrowser geladen werden.

Hinweis: Im oberen Framebereich sollte nun die Ausgabe der Datei 'output.php' erscheinen, während im unteren Framebereich immer noch mit einer Fehlermeldung zu rechnen ist, da die dort erwartetet Eingabedatei input.php noch nicht existiert.

Die Ergebnisdatei[Bearbeiten]

Referenzen[Bearbeiten]

  1. Kontrollstrukturen: if
  2. Filesystemfunktion: file_exists
  3. Kontrollstruktur: include
  4. Filesystemfunktion: file
  5. Arrays in PHP
  6. Arrayfunktion: array_reverse
  7. Arrayfunktion: array_slice
  8. Kontrollstruktur: foreach
  9. Zeichenkettenfunktion: echo