Author: Progman, zuletzt bearbeitet von progman @ 2003/07/26 16:11:13
Bitte beachten Sie, dass die Tutorialkapitel zusammenhängen. Wenn sie direkt auf ein Kapitel verlinkt wurden müssen Sie gegebenenfalls die vorherigen Kapitel auch lesen. Achten Sie beim lesen darauf, dass Sie kein Kapitel überspringen.
Kommunikation zwischen Client und Server
1. Was ist PHP und was macht es?
PHP steht für "PHP: Hypertext Preprocessor". Frei übersetzt heißt das, dass die Dokumente, die man von einem Server beantragen möchte, vor (Preprocessor) dem Senden umgewandelt werden. Sprich, die PHP-Befehle in der Datei werden ausgeführt. Ist alles abgeschlossen, wird das Ergebnis bzw. die Ausgabe des Skriptes an den Client (normalerweise ein Browser wie der Microsoft Internet Explorer oder der Mozilla) gesendet. Dazu ein paar Veranschaulichungen:
PHP ist ein Modul, das auf dem Server installiert ist. Oft ist auch eine Datenbank installiert (hier der Einfachheit halber auch als Modul dargestellt), z.B. MySQL. Das könnte dann so aussehen:
Abb.: Wie ein Server aufgebaut ist
Daraus erschließt sich eine wichtige Regel: "PHP läuft serverseitig". Und zwar nur auf dem Server. PHP-Skript werden nicht auf dem Client bzw. nicht im Browser ausgeführt. Es macht nix anderes als ein HTML-Dokument zu erzeugen. Deshalb müsst ihr folgendes wissen: Mit PHP ist es nicht möglich, den Client/Browser zu verändern oder zu steuern. Man kann nicht die Bildschirmgröße auslesen, nicht WinAmp starten lassen, keine Datei auf dem Clientrechner (der Computer, auf dem der Browser läuft) öffnen (z.B. c:\autoexec.bat) oder diese sogar bearbeiten, kein format c: ausführen oder den Rechner runterfahren. Ich sage das hier so deutlich, weil manche meinen, dies mit PHP machen zu wollen. Aber es geht nun mal nicht. Wäre ja auch ne echte Sicherheitslücke, wenn PHP eine Datei auf dem Client löschen könnte. Stellt euch einfach vor, zwischen PHP und dem Client ist eine riesige Mauer. Keiner kann den anderen so ohne weiteres erreichen. Kommunizieren können Webserver und Browser nur über HTTP. Nur was kann dann PHP?
PHP hat die Möglichkeit, Daten aus einem Formular in eine Datenbank zu speichern, zu bearbeiten, oder diese wieder auszulesen. Diverse Online-Ligen wurden in PHP und MySQL geschrieben. Mit Javascript geht das nicht, und mit reinem HTML schon gar nicht. Mit PHP kann auch eine Clanseite programmiert werden, auf der sich die Member einloggen und News posten können. Auch ein claninterner Bereich wie ClanIntern ist machbar. Der Vorteil von PHP ist aber auch, dass keiner den PHP-Code klauen kann. Diesen kann man nur per FTP hoch- bzw. runterladen, und nicht, wie bei Seiten ohne serverseitige Skripte, mit Rechtsklick - Quelltext anzeigen - Datei - Speichern unter... einfach speichern. Die Besucher eurer Homepage bekommen den PHP-Code, den ihr mit Mühe und Not geschrieben habt, nie zu sehen. Das Besuchen einer Seite ist ungefähr wie folgt aufgebaut:
2. Anfrage einer Datei aus der Sicht des Clients
Abb.: Client stellt eine Anfrage auf eine Datei
So sieht das sehr vereinfacht aus ;). Als Beispiel wurde hier eine Anfrage gestellt, um die Datei index.php zu bekommen. Die Antwort des Webservers könnte dann so aussehen:
Abb.: Server antwortet auf die Anfrage
Es sind immer zwei Teile, die der Webserver zurückliefert.
-
Header - Einmal sind das die Headerangaben. Sie beschreiben den Inhalt, der gesendet wird. Und diese Headerangaben müssen natürlich vor dem Inhalt gesendet werden. Es ist schwachsinnig, dem Client zu sagen Hey, jetzt folgt eine HTML Seite und dann später zu sagen Ne doch nicht, es folgt ein PNG-Bild. Normalerweise werden Header automatisch gesendet. Mit PHP ist es jedoch möglich, manuell Header zu senden. Dies ist nötig, wenn man ein Bild mit PHP erstellen möchte. Die Headerdaten sind für den Besucher der Homepage nicht sichtbar, können aber von manchen Browser, und besonders von Email-Clients, angezeigt werden. Der wird dann zum Beispiel folgendes sehen:
Content-Type: text/html Content-Length: 426342 Expires: Mon, 26 Jul 1997 05:00:00 GMT ... (all diese Angaben können mit PHP bearbeitet werden, wenn es notwendig wird, sie zu ändern)
Diese Headerangaben kann man mit dem <head>-Element aus HTML vergleichen. Dieses Element muss auch vor dem <body>-Element stehen und beschreibt die Seite.
-
Inhalt - Nachdem die Headerdaten gesendet wurden, kommt der eigentliche Inhalt der Datei. Dies kann z.B. ein Binärcode des Bildes oder ein HTML-Code sein. Dies ist vergleichbar mit dem <body>-Element, der nach dem <head> steht.
Wie auch immer, PHP erzeugt mit seinen Befehlen einen Header und eine Ausgabe, die dann im Browser entsprechend behandelt wird (Bilder werden angezeigt, HTML-Code wird interpretiert, Zip-Dateien werden gespeichert, ...).
3. Aus der Sicht des Servers
Der Server hat es dabei etwas schwieriger als der Client.
Abb.: Server bekommt eine Anfrage von einem Client
Der Webserver kriegt die Anfrage vom Client, dass er die Datei index.php schicken soll. Wäre diese Datei eine *.html Datei, wäre das kein Problem.
-
Client sendet Anfrage
-
Server bekommt Anfrage
-
Server sendet Datei
-
Client empfängt Datei
Und das war's. Deshalb sind reine HTML-Dateien sehr schnell beim Client.
PHP Dateien brauchen aber etwas länger, bis sie bei dem Client/Browser eintreffen. Der Ablauf ist ungefähr so:
Abb.: Server schickt Datei zum PHP Interpreter
Zuerst öffnet der Webserver die index.php. Der Inhalt der index.php wird an den PHP Interpreter gesendet.
Abb.: PHP arbeitet die Befehle ab
Nachdem der PHP Interpreter die Datei bekommen hat, führt er nun die PHP-Befehle in dieser Datei aus. Diesen Vorgang wird als Parsen bezeichnet. Je nachdem, was die Befehle in der PHP Datei machen, erzeugt PHP dann entsprechend die zwei bekannten Teile, die ein Client empfängt - die Headerangaben und den eigentlichen Inhalt. Um die Headerangaben muss man sich, außer in einigen Fällen, nicht kümmern, sie werden von PHP automatisch erstellt. Zum Beispiel sendet PHP automatisch den "Content-Type"-Header Content-Type: text/html, denn in den meisten Fällen erstellt PHP ein HTML-Dokument.
Wenn PHP mit dem Parsen fertig ist, könnte die Ausgabe wie folgt aussehen (die Zeilen "Headerangaben:" und "Inhalt:" sind natürlich nur zum besseren Verständnis da und werden nicht ausgegeben):
Abb.: Endergebnis nach dem Parsen
Diese Daten werden dann zum Client geschickt, wo der Browser die Daten dann interpretiert:
Abb.: Server sendet nun die Daten zum Client
Das ist der Grund warum PHP-Dateien etwas länger brauchen als reine HTML-Seiten. Dem Browser ist dies aber egal. Er stellt nur eine Anfrage und bekommt die Daten zugeschickt. Er weiß nichtmal, dass auf dem Server PHP installiert ist. Wenn PHP auf eine Datenbank zugreift, kann es unter Umständen noch länger dauern. Dies wird euch sofort auffallen, wenn ihr von HTML auf PHP umsteigt.
Fragen zum aktuellen Thema
- Welche Daten werden vom Server zum Client gesendet?
-
Es werden immer zwei Teile an den Browser geschickt:
-
Header des Dokuments
-
Inhalt des Dokuments
Beide Teile können mit PHP geändert werden.
-