1. Was ist PHP und was macht es?
PHP ist das rekursive Backronym für PHP: Hypertext Preprocessor. Der Name deutet an, dass etwas vor einem Zeitpunkt verarbeitet wird. In diesem Fall werden die PHP-Befehle in einer Datei verarbeitet bevor der Server die Datei (bzw. dessen Ausgabe) sendet. Vergleichbar ist dies mit einem C-Präprozessor.
PHP ist ein Modul bzw. ein Programm, welches auf den Webserver installiert ist. In den meisten Fällen ist dann auch z.B. eine Datenbank wie MySQL installiert. Das folgende Diagramm veranschaulicht die installierten Programme/Module auf einem Webserver.
An dem Diagramm ist zu erkennen, dass PHP nichts mit dem Client bzw. mit dessem Browser zu tun hat. Somit ist es mit PHP auch nicht möglich den Client als solches zu steuern. Gewünschte Aktionen, wie Winamp zu steuern oder Programme (auf dem Client) zu starten, sind somit nicht möglich.
Eine typische Anwendung von PHP ist das Verarbeiten von Daten aus einem HTML-Formular, wenn diese an den
Webserver geschickt werden. Diese PHP-Skripte können, da sie auf dem Webserver interpretiert
werden, mit einer dort installierten Datenbank arbeiten und somit die Formulardaten in diese
speichern. Dadurch ist es z.B. möglich mit PHP Newsscripte zu schreiben, die ihre Newsbeiträge aus
einer Datenbank auslesen. Das Ergebnis eines solchen PHP-Skripts ist jedoch weiterhin
ein normales HTML-Dokument. Der Browser erkennt somit gar nicht, dass der HTML-Code durch ein
PHP-Skript erzeugt wurde (Der Benutzer erkennt natürlich die .php
Endung in der
URL). Dies heißt auch, dass die Benutzer nicht den PHP-Code lesen können.
2. Anfrage einer Datei aus der Sicht des Clients
Wenn der Client eine Datei vom Server anfragt sieht das vereinfacht wie folgt aus.
Aus der Sicht des Clients kriegt dieser dann eine Antwort vom Server.
Obwohl nur eine einzige Verbindung zwischen Client und Server besteht, bekommt der Client zwei logisch getrennte Inhalte.
-
Zuerst werden zum Client diverse Headerangaben gesendet. Diese Angaben beschreiben den darauf folgenden Inhalt, sowie enthalten einige Informationen über den Server. Diese Daten sind für den Benutzer in erster Linie nicht sichtbar, wenn er eine Internetseite besucht. Für manche Browser existieren Extensions, mit denen sich diese Headerangaben anzeigen lassen können. Headerangaben können z.B. wie folgt aussehen:
HTTP/1.1 200 OK Date: Mon, 26 Nov 2007 22:37:21 GMT Server: Apache Content-Type: text/html
In PHP ist es möglich diese Headerangaben zu bearbeiten, bevor sie zum Client gesendet werden. Somit ist es möglich, dass ein PHP-Skript ein Bild generieren kann. Jedoch muss vorher der Content-Type geändert werden, z.B. auf
Content-Type: image/png
. -
Nach den Headerangaben wird der eigentliche Inhalt gesendet. Dieser enthält meistens HTML-Code, kann aber auch Binärdaten wie von einem PNG-Bild enthalten.
Mit PHP ist es möglich, beide Bereiche nach Belieben zu bearbeiten. Jedoch gibt es hier
eine Einschränkung. Die Headerangaben müssen vor dem Inhalt gesendet werden (passiert automatisch
mit der ersten Ausgabe).
Wenn sie z.B. mit PHP einen Text ausgeben, können sie danach nicht mehr
die Headerangaben ändern. Ein Versuch es trotzdem zu machen erzeugt eine Fehlermeldung der Form
Cannot modify header information - headers already sent by (output started at ...)
.
3. Anfrage einer Datei aus der Sicht des Servers
Wenn der Server eine Anfrage auf eine HTML-Datei bekommt, so braucht der Server diese nur von seiner Festplatte zu laden und zum Client zu senden.
Da der Server auch diverse Headerangaben
senden muss, erzeugt er aus der Datei von sich aus einige Headerangaben. Als Beispiel
wird die Dateigröße angegeben, formal ist dies der Content-Length
-Header. Die kompletten
Header könnten wie folgt aussehen.
HTTP/1.1 200 OK Date: Wed, 28 Nov 2007 16:34:05 GMT Server: Apache Last-Modified: Mon, 26 Nov 2007 23:24:33 GMT ETag: "d9b8a-2301-43fdd444c0e40" Accept-Ranges: bytes Content-Length: 8961 Content-Type: text/html
Dahinter sendet der Server dann den HTML-Code der HTML-Datei und ist fertig mit seiner Arbeit.
Da der Server nichts großartiges machen muss, geschieht dies in der Regel sehr schnell. Interessanter wird die Sache, wenn der Client eine Anfrage auf eine Datei sendet und diese PHP-Code enthält.
Nun muss der Server den Inhalt der Datei laden. Dies ist gleich gegenüber einer normalen HTML-Datei.
Ab jetzt muss die Bearbeitung durch PHP geschehen. Da der Server nicht von sich aus PHP-Befehle verarbeiten kann, startet er den PHP-Interpreter. Dieser arbeitet nun die Befehle in der Datei entsprechend den Regeln einer Programmiersprache ab.
Am Ende hat dann der PHP-Interpreter bzw. ein PHP-Modul im Webserver die Datei verarbeitet. Nun stehen dem Server die zwei Bereiche Headerangaben und Inhalt vom PHP-Interpreter zur Verfügung. Diese werden nun zum Client gesendet.
Aus der Sicht des Clients hat sich also nichts geändert. Er bekommt gar nicht mit, dass auf den Server PHP installiert ist und das die angeforderte Datei PHP-Code enthielt. Was er bzw. der Besucher jedoch merkt ist ein Geschwindigkeitsverlust. Da PHP-Dateien erst durch den PHP-Interpreter laufen müssen, braucht der Server viel mehr Zeit (im Vergleich zu einfachen HTML-Dateien) um eine Antwort senden zu können.