Webprogrammierung — 11. Lektion

PHP

PHP ist eine Programmiersprache, die wie JavaScript eine Scriptsprache ist (eine Anweisung wird interpretiert und ausgeführt bevor die nächste Anweisung an der Reihe ist). Allerdings wird PHP auf einem Webserver (und nicht beim Client/Browser) eingesetzt. Damit kann auf Dateien oder Datenbanken auf einem Server zugegriffen werden, die für einen Browser sonst nicht zugänglich sind. Durch PHP-Programme werden dynamisch Webinhalte erzeugt (im Gegensatz zu statischen Webseiten, die nur HTML nutzen) und einem Browser zum Anzeigen zur Verfügung gestellt. Die gesamte Ausgabe von einem PHP-Programm wird wie eine Datei an den Browser gesendet.
Nach dem Erstellen von PHP-Programmen müssen sie auf einen Webserver hochgeladen werden, um ausgeführt zu werden. Sie werden von einem Browser aufgerufen. Damit werden sie nicht wie css- oder js-Dateien in html-Dateien eingebunden (es werden gegebenenfalls die Dateinamen in einem src- oder href-Attribut angegeben). Sie selbst liefern vielmehr dem Browser die anzuzeigenden Daten (z.B. als Texte in der Sprache HTML, eventuell mit CSS- und JavaScript-Bestandteilen), die vom Browser gemäß den Regeln der verwendeten Sprache interpretiert werden.
Erstellt werden können PHP-Programme ebenfalls mit einem beliebigen Text-Editor (z.B. Notepad++, der das Erstellen beispielsweise durch Syntax-Hervorhebung unterstützt). Die Dateien müssen die Endung php bekommen, um sie als PHP-Programme zu kennzeichnen . Wenn ein Browser von einem Server eine php-Datei anfordert, wird der Server diese Datei als PHP-Programm abarbeiten und statt der Datei die Ausgabe des Programmes an den Server senden. Wenn eine Datei mit einer anderen Endung als php angefordert wird, wird sie direkt an den Browser gesendet (und eben nicht als PHP-Programm interpretiert).

XAMPP

Um beim Erstellen und Testen von PHP-Programmen nicht auf einen Webserver bei einem Provider angewiesen zu sein, empfiehlt es sich, XAMPP auf seinem Rechner zu installieren (https://www.apachefriends.org/de/). Damit kann man einen Apache-Webserver mit allen nötigen Bestandteilen auf seinem lokalen Rechner offline laufen lassen. Es wird empfohlen, XAMPP nicht in einem Unterordner zu installieren, sondern im obersten Verzeichnis (unter Windows z.B. direkt im Laufwerk C:\ oder D:\).
Wenn XAMPP installiert ist, das Control Panel starten und darin Apache starten (falls dies nicht automatisch geschehen ist, erkennbar an der Aufschrift „Stop” auf dem Aktionsknopf – wenn Apache nicht läuft, steht dort „Start”). In dem Installationsordner gibt es einen Ordner htdocs. Dies ist der Root-Ordner für den Webserver. Es wird dringend empfohlen, in dem Ordner htdocs einen eigenen Ordner anzulegen (z.B. mit eigenem Namen oder einem Namen, an dem man erkennt, dass dieser Ordner von einem selbst ist und nicht zum XAMPP-System gehört). In diesem eigenen Ordner sollten dann weitere Ordner projektbezogen angelegt werden.
Ein PHP-Programm muss vom Browser aus auf einem Webserver gestartet werden, da es sonst nicht als solches interpretiert wird. Wenn der Webserver lokal ist (wie bei XAMPP), dann ist der Webserver localhost. Der Pfad zur php-Datei ist dann relativ zum Root-Ordner des Webservers anzugeben. Wenn es auch html-Dateien gibt, die die PHP-Programme aufrufen (wie es z.B. hier in dieser Lektion bei den Beispielen der Fall ist), dann trifft auf sie das Gleiche zu. Auch sie müssen sich unterhalb des Root-Ordners des Webservers befinden und müssen vom Webserver durch den Vorsatz von localhost angefordert werden. Andersfalls werden sie nur lokal aus dem Dateisystem aufgerufen (zu erkennen am vorangestellten file:// in der Adresszeile) und der URL der aufgerufenen php-Dateien wird ebenfalls file:// vorangestellt. Damit wird der Webserver umgangen und die PHP-Programme werden nicht ausgeführt (nicht einmal gefunden).
Angenommen, XAMPP wurde unter Windows im Ordner c:\xampp installiert, im Root-Ordner wurde ein Ordner meins angelegt (für alle eigenen Projekte), darunter wurde ein Ordner Webprogrammierung angelegt und darunter wiederum ein Ordner L11 (für diese 11. Lektion), der alle Dateien zu dieser Lektion enthält. Dann lautet die URL für die Hauptseite dieser Lektion (damit alles funktioniert):
http://localhost/meins/Webprogrammierung/L11/index.html.
Das erste Beispiel-Programm zu PHP wird von dieser html-Datei aus aufgerufen und die Ausgabe des PHP-Programms wird im Inline Frame angezeigt. Soll das Beispiel-Programm direkt von einem Tab aus aufgerufen werden, so ist die URL
http://localhost/meins/Webprogrammierung/L11/bsp50.php
zu verwenden.

Einführung in PHP

Wird eine php-Datei durch einen Browser von einem Server angefordert, so wird der Server das betreffende Programm ausführen (sofern gefunden und der benötigte PHP-Interpretierer auf Server-Seite installiert ist) und dem Browser die vom Programm erzeugte Ausgabe zusenden. Der Browser erhält also nicht das Programm. Daher kann man sich mit der Aktion „Seitenquelltext anzeigen” im Browser nur das anzeigen lassen, was der Browser bekommen hat, nicht jedoch, wie die php-Datei aussieht. Das, was der Browser erhält, wird er aber wiederum clientseitig interpretieren. Wenn vom Server eine html-Datei angefordert wird, so wird ihr Inhalt an den Browser geschickt. Es macht also keinen Unterschied, ob die Ausgabe von einem PHP-Programm erzeugt wurde oder von einem „Dateivorleser”.
Ein PHP-Programm ist in einem Block zwischen <?php und ?> eingefasst. Dazwischen stehen die einzelnen Anweisungen. Eine Ausgabe erfolgt mit dem Befehl echo. Kommentare werden in /* und */ eingeschlossen oder stehen nach // (wie auch in Java). Es gibt zusätzlich noch die Möglichkeit, sie hinter # zu setzen (wie in Shellsprachen unter Unix).
In dem obigen Beispiel wird die Zeichenkette Hallo Welt! vom Webserver an den Browser übertragen. Davor steht ein Kommentar, der weder vom PHP-Parser beachtet noch an den Browser gesendet wird. Obwohl die Ausgabe kein in HTML geschriebener Text ist, wird sie wohl von den meisten Browsern angezeigt. Trotzdem sollte man eine korrekte Ausgabe produzieren und nicht auf die Interpretation von Browserherstellern bauen. Spätestens bei der Verwendung von Sonderzeichen und Angaben zur Webseite (z.B. Titel) sollten entsprechende Daten mitgeschickt werden. Um nicht ganze HTML-Texte in eine oder mehrere echo-Anweisungen schreiben zu müssen, werden Texte außerhalb eines php-Blockes so an den Browser übermittelt, wie es auch mit html-Dateien geschieht. Damit müssen dann nur noch die Abschnitte in php-Blöcke gesetzt werden, die nicht statisch sind.
Wie im Beispiel zu sehen, ist das Operationszeichen für die Aneinanderreihung von Zeichenketten der Punkt. In der zweiten echo-Anweisung wird das Unterprogramm date aufgerufen. Der übergebene Parameter gibt das Format an, in dem Datum und Zeit zurückgegeben werden sollen (hier Stunden und Minuten durch Doppelpunkt getrennt).
Auch wenn die Datei nun überwiegend wie eine html-Datei aussieht, muss sie doch die Endung php haben, um durch den PHP-Parser zu laufen. Sonst wird die Datei vom Server an den Browser gesendet, ohne dass die in PHP geschriebenen Teile interpretiert worden sind. Der Browser kann damit aber auch nichts anfangen, so dass das Erscheinungsbild beim Nutzer nicht wie gewünscht ist – wie an folgendem schlechten Beispiel zu sehen ist (im Beispiel zuvor handelt es sich um eine php-Datei, nun um eine html-Datei; beide haben den gleichen Inhalt). Dies sollte man unbedingt berücksichtigen, wenn man bereits geschriebene html-Dateien mit PHP anreichert.
Zeichenketten werden in einfache oder doppelte Anführungszeichen gesetzt (Anfang und Ende müssen übereinstimmen). Innerhalb einer solchen Zeichenkette können die jeweils anderen ausgegeben werden. Die gleichen Anführungsstriche kann man auch ausgeben, indem man sie mit einem Backslash „maskiert”: z.B. \". Es gibt einen wesentlichen Unterschied zwischen den beiden Varianten (siehe Abschnitt zu Variablen): In doppelten Anführungsstrichen stehende Variablen werden durch ihren Wert ersetzt, in einfachen Anführungsstrichen stehende nicht, da wird der Text nicht interpretiert.

Variablen und Funktionen

Variable: Platzhalter für einen Wert, Kennzeichnung durch $ vor dem eigentlichen Namen, keine explizite Deklaration und keine Typangabe, Wertzuweisung durch = (Variable links, Wert rechts)
Funktion: Abbildung einer Menge von Eingabewerten (Parametern) in einen Ausgabewert (Rückgabewert), in PHP auch prozedural (ohne Rückgabewert) verwendet
Beispiel in Anlehnung an jenes von der Einführung in JavaScript auf PHP abgewandelt:
function headline($s,$i) {
  echo "<h".$i.">".$s."</h".$i.">";
  return true;
}
function: leitet Funktion ein
headline: Funktionsname
$s und $i: Argumente (lokale Variablen, über die auf die übergebenen Parameter zugegriffen wird)
echo: Aufruf der Ausgaberoutine zum Schreiben einer Zeichenkette in den Ausgabestrom
"<h".$i.">".$s."</h".$i.">": Argument wird aus einzelnen Zeichenketten und den Werten von $s und $i zusammengesetzt
return: Anweisung zum Zurückkehren zur aufrufenden Stelle
true: Rückgabewert (hier beispielsweise interpretiert als Erfolgsindikator)
Das Zusammensetzen von Zeichenketten aus Texten und Variablen kann auch einfacher erfolgen: Bei Zeichenketten in doppelten Anführungsstrichen werden Wörter, die mit $ beginnen, als Variablen interpretiert und durch ihren Wert ersetzt (bei Zeichenketten in einfachen Anführungsstrichen geschieht dies nicht). Soll in einer in doppelten Anführungsstrichen stehenden Zeichenkette das Dollarzeichen ausgegeben werden, so ist es zu maskieren: \$.

Arithmetische Ausdrücke

Terme sind Verknüpfungen von Zahlen. Der Wert ergibt sich aus der Ausführung der beteiligten Operationen; wenn er definiert ist, ist er wieder eine Zahl. Die Grundoperationen sind die gleichen wie in JavaScript.

Operationen mit Zuweisung

Ebenfalls wie in JavaScript: Wenn der Wert einer Variablen umgerechnet werden soll, wird aus dem Wert ein neuer berechnet und wieder dieser Variablen zugewiesen.
Dafür gibt es abkürzende Operationen: ao=b, wobei o für eine der Operationen +, -, *, /, % steht, a eine Variable und b ein Wert ist.
Speziell zum Inkrementieren und Dekrementieren gibt es noch die Möglichkeiten a++ und ++a bzw. a-- und --a. Steht die Variable vor dem Operator, dann wird erst der Wert verwendet und danach in- oder dekrementiert. Steht der Operator zuerst, so wird erst der Wert verändert und dann verwendet.

Logische Ausdrücke

Logische Audrücke sind Verknüpfungen von Wahrheitswerten. Die einfachsten sind relationale Ausdrücke (z.B. Vergleiche). Der Wert ist wieder ein Wahrheitswert.
Vergleichsoperatoren (wie bei JavaScript): == (Wertgleichheit), != (Ungleichheit), < (kleiner), <= (kleiner oder gleich), > (größer), >= (größer oder gleich); === (Identität, Wert und Typ stimmen überein)
Achtung! Ebenfalls wie bei JavaScript haben auch Zuweisungen einen Wert, nämlich den, der der Variablen zugewiesen wird. Da der Wert 0 als false interpretiert wird, und alle Werte verschieden von 0 als true, kann ein Verwechseln von Vergleichsoperator == und Zuweisungsoperator = zu ungewolltem Verhalten führen – siehe Beispiel im Abschnitt zur Fallunterscheidung.

Fallunterscheidung

Wie in JavaScript: Abarbeitung von Teilen des Programmes abhängig von einer Bedingung (dem Wahrheitswert eines logischen Ausdruckes) oder dem Wert einer Variablen.
Syntax:
Falls ein Zweig einer logischen Fallunterscheidung nur aus einer Anweisung besteht, dürfen die geschweiften Klammern weggelassen werden.
Wie bei JavaScript, aber im Gegensatz zu anderen Sprachen, z.B. Java, sind bei einer mehrwertigen Fallunterscheidung (switch-Anweisung) auch Zeichenketten als Sprungziele erlaubt.

Schleifen

Wie in JavaScript: Wiederholte Abarbeitung von Teilen des Programmes abhängig von einer Bedingung.
Syntax:
Falls der Schleifenrumpf nur aus einer Anweisung besteht, dürfen die geschweiften Klammern weggelassen werden.