2012-12-27 8 views
6

Mögliche Duplizieren:
I never really understood: what is CGI?Wie interagiert PHP mit HTTP-Servern? (Wie lighttpd)

Im lighttpd Config definieren wir zwei Pfade (wie unten gezeigt), eine davon ist die binäre von PHP, die anderen ist der Socket-Pfad. Meine Frage ist, in welchem ​​Punkt holt die Lighttpd die endgültige HTML-Ausgabe von PHP erstellt? Gibt die Binärdatei eine Ausgabe an Lighttpd als Antwort? Oder erstellt es eine temporäre Datei an einem anderen Ort und der Server holt sie?

fastcgi.server = (".php" => ((
        "bin-path" => "/usr/bin/php-cgi", 
        "socket" => "/tmp/php.socket" 
       ))) 
+0

Pipes normalerweise (siehe [CGI] (http://en.wikipedia.org/wiki/Common_Gateway_Interface)). Da diese Konfiguration jedoch einen Socket angibt, verwenden Sie vermutlich die FastCGI-Binärdatei. – mario

+1

Kein Duplikat; Das Config-Snippet handelt von FastCGI, nicht von CGI. bin-path bedeutet, dass lighty das Backend erzeugt (im Gegensatz zum externen Launch), der Socket ist der Pfad zu einem "Unix Socket" (kein Named Pipe, ein echter Socket). lighty stellt für jede Anfrage eine Verbindung zu diesem Socket her, genauso wie ein Browser eine Verbindung zum Webserver herstellt - aber für die Details wird ein anderes Protokoll verwendet. – Stefan

+0

Möchten Sie bitte die "doppelte" Anweisung entfernen, da diese Frage kein Duplikat ist. – tolga

Antwort

1

PHP kann als CGI-Binärdatei oder als Apache-Modul ausgeführt werden. Bei Verwendung als CGI-Binary kommuniziert der HTTP-Server über pipes oder mit PHP. Diese können stdout verwenden, was eine Form der Interprozesskommunikation ist, die keinen Plattenzugriff erfordert. Wenn es als Apache-Modul ausgeführt wird, ist PHP effektiv Teil des Apache-Servers. Dies ist wesentlich schneller als die Ausführung als CGI, hat jedoch einige Sicherheitseinschränkungen.

1

Von meinem Verständnis wird die bin-path verwendet, um den FastCGI-Server zu feuern (falls es noch nicht gestartet ist), während die socket die Anforderung in die Server-Proxy einmal gestartet verwendet wird.

Der endgültige HTML wird daher von /tmp/php.socket gezogen, nachdem die Anfrage verarbeitet wurde; Es ist ein Named Pipe im Gegensatz zu einem Netzwerk-Socket, aber sie sind in jeder anderen Hinsicht ziemlich ähnlich.

Verwandte Themen