Re:
Leider verstehe ich das Script nicht ganz.
fsockopen() Öffnet eine TCP-Verbindung und gibt einen sogenanten Resourcenhandler auf die Verbindung zurück. Eine Resouce kann dabei wie in den Funktionen des Dateisystems eine Datei auf der Festplatte sein, oder wie in diesem Fall eine Verbindung. Diese habe ich im Script in der Variable $f gespeichert. Beiden Resourcen (Datei und Verbindung) ist zu eigen, daß man aus ihnen lesen kann, aber auch in sie schreiben kann.
fputs() "schreibt" also in diese Verbindung wie das Ablegen von Daten in eine Datei. Dabei sind die geschriebenen Daten nicht willkürlich, sondern haben einem Muster zu entsprechen. Dieses Muster wird Duch das Protokoll für Hypertexttransfer bestimmt (HTTP). Auch die Autentifizierung ist ein Teil - eine Erweiterung dieses Protokolls. Daher hatte ich Dich auch auf die entsprechende RFC verwiesen.
Was passiert in der Schleife?
Das oben beschriebene Öffnen der Verbindung und im Wesentlichen das Schrieben mit fputs() der Daten, also der sogenannte Header, stellen einen Request (Anfrage) dar. Der Server empfängt diesen Request und beantwortet ihn. Dafür klappert er seine Konfiguration ab und weiß, ACHTUNG die Dateiendung ".php" heißt jetzt, ich soll PHP beauftragen, nach der Datei "eddi.php" in %{DOCUMENT_ROOT}/eddi.php )¹ auf der Festplatte zu suchen und gegebenenfalls diese zu parsen.
Jetzt kommt der wichtige Teil: PHP nimmt also seine Arbeit auf, findet das Script und arbeitet es ab. Somit hast Du remoted ein Script ausgeführt, oder anders ausgedrück das gemacht, was Dein Browser täglich machen muß ;)
Die Daten, die PHP an den Server übergibt (üblicher Weise ein [x]HTML-Dokument) werden dem Server zur Verfügung gestellt, die dieser nun endlich servieren kann. Dazu schreibt dieser seinerseit einen Header (Response-Header) in die Verbindung und den auszuliefernden Inhalt (also das [x]HTML-Dokument).
Was wird da ausgelesen?
Wie oben beschreiben kann man aus einer Resouce -einer Datei gleich- lesen und schreiben. Wenn Du den Inhalt benötigst, der von PHP erstellt wurde, wirst Du den Inhalt, den der Server in die Verbindung geschreiben hat, auslesen wollen. Das geschieht in der Schleife. Dabei wird der Inhalt immer aus dem HTTP-Header am Anfang und den folgenden Inhalt bestehen - das wird also ausgelesen
Das Script auf dem Server (bei dir wahrscheinlich eddi.php) soll nur ausgeführt werden.
Wenn es nur um die alleinige Ausführung geht, dem (potentiell) von PHP zu erstellende Inhalt keinerlei Relevanz zukommt, kannst Du auf das Auslesen mit fgets() verzichten, wenn PHP mit ignore_user_abort() ausgeführt/konfiguriert wird.
Und was bedeutet \r\n ?
Das ist die zwingende, da vorgeschriebene, Endung einer HTTP-Header-Zeile (der String, der mit fputs() in die Verbindung geschrieben wurde) und bezeichnent die ACSII-Zeichen 13 und 10. Für PHP gesehen, sind dies Escape-Folgen und sind lediglich eine Erleichtrung, da man andernfalls mit chr() arbeiten müßte.
Das klingt jetzt alles verworren und nicht gerade einfach, aber die eigentlichen Mechanismen dahinter sind es noch viel mehr ;)
Eines solltest Du jedenfalls mitnehmen. Im Internet findest Du alles, was Du brauchst, weil sich viele Leute darum bemüht haben ihr Wissen weiter zu vermitteln. Es will aber auch gelesen werden!
Gruß aus Berlin!
eddi
1. Die Schreibweise %{VARIABLE} ist die Syntax einer Servervariablen des apachen.
In PHP würde es also $VARIABLE heißen. DOCUMENT_ROOT gibt dabei das oberste
Verzeichnis des Webs auf der Festplatte an (vgl.: DocumentRoot
in der Konfigurationsdatei des Servers)