Quakenet/#php Tutorial

Hinweis: Wenn sie diese Seite von einer externen URL aufgerufen haben achten sie darauf das alle Kapitel aufeinander aufbauen. Stellen sie daher sicher dass sie alle vorherigen Kapitel gelesen haben, da sie sonst relevante Informationen übersehen.

Kommunikation zwischen Client und Server

  1. Was ist PHP und was macht es?
  2. Anfrage einer Datei aus der Sicht des Clients
  3. Anfrage einer Datei aus der Sicht des Servers

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.

Installierte Module auf einem Webserver Abb.:Installierte 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.

Client schickt eine Anfrage zum Server Abb.:Client schickt eine Anfrage zum Server

Aus der Sicht des Clients kriegt dieser dann eine Antwort vom Server.

Client bekommt die Antwort vom Server Abb.:Client bekommt die Antwort vom Server

Obwohl nur eine einzige Verbindung zwischen Client und Server besteht, bekommt der Client zwei logisch getrennte Inhalte.

  1. 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.

  2. 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.

Server bekommt eine Anfrage von einem Client Abb.:Server bekommt eine Anfrage von einem Client

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.

Server sendet die Antwort zum Client Abb.:Server sendet die Antwort zum Client

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.

Server bekommt eine Anfrage von einem Client Abb.:Server bekommt eine Anfrage von einem Client

Nun muss der Server den Inhalt der Datei laden. Dies ist gleich gegenüber einer normalen HTML-Datei.

Server läd den Inhalt der Datei Abb.:Server läd den Inhalt der 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.

Server verarbeitet die PHP-Befehle mit einem PHP-Interpreter Abb.:Server verarbeitet die PHP-Befehle mit einem PHP-Interpreter

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.

Server sendet die Antwort zum Client Abb.:Server sendet die Antwort zum Client

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.

Fragen zum Kapitel

1. Welche zwei Teile werden vom Server zum Client gesendet?

In einer HTTP-Verbindung werden die beiden Teile Headerangaben und Inhalt gesendet, und zwar in genau dieser Reihenfolge. Für den genauen Datentransfer zwischen den Client und Server existiert die Norm RFC 2616 - Hypertext Transfer Protocol -- HTTP/1.1, die dies genau festlegt.

Zurück zu Weiter zu
Copyright © bei den OPs von #php.de/QuakeNet Valid XHTML 1.0 Strict Valid CSS!