2010-10-17 14 views
46

Ich habe versucht, die genaue Bedeutung/Zweck des Ladens von PHP als ein Apache-Modul im Vergleich zu den anderen zu verstehen.mod_php vs cgi vs fast-cgi

Wenn PHP als Apache-Modul installiert ist, was genau passiert? Zum Beispiel passiert das Lesen der php-ini-Datei jedes Mal, wenn die PHP-Anfrage kommt oder wenn das PHP-Modul alleine geladen wird?

Antwort

22

php.ini wird gelesen, wenn das PHP-Modul in mod_php, FastCGI und FPM geladen ist. Im normalen CGI-Modus muss die Konfigurationsdatei zur Laufzeit gelesen werden, da keine vorgekerkten Prozesse vorhanden sind.

Ich denke, der einzige wirkliche Vorteil von PHP als Modul innerhalb des Webservers ist, dass die Konfiguration einfacher ist. Sie erhalten eine viel bessere Leistung, wenn Sie es im FastCGI- oder FPM-Modus ausführen und einen Threading- oder Eventeed-Apache (statt eines gegabelten Apache) verwenden können oder wenn Sie Apache vollständig löschen können.

+0

Also, um genauer zu sein, sagen Sie, wenn ich eine Variable habe, die von allen Anfragen verwendet werden könnte. Mit anderen Worten, nehmen wir an, wir müssen den PHP-Interpreter veranlassen, nach Dateien zu suchen, die sich auf den certain-Pfad beziehen (/ home/user/documents). Kann ich/home/user/Dokumente in einer Konfiguration speichern und einmal in eine globale Variable laden? Wenn der Benutzer file_get_contents ("new.txt") ausgibt, wird er in file_get_contents ("/ home/user/documents/new.txt") übersetzt. –

+0

Schauen Sie sich die PHP-Einstellung auto_prepend_file an, die Ihnen die Möglichkeit gibt, PHP voranzustellen Code, der ausgeführt werden soll, bevor die tatsächliche Anforderung analysiert wird. Verwenden Sie in der Datei "auto_prepended" chdir(), um das Verzeichnis zu ändern. Beachten Sie jedoch, dass dies ALLE Dateioperationen abfängt, sogar include() und require()! –

+1

@Karthick: Warum sollte der PHP-Interpreter solche Informationen speichern? Diese Art von Information ist für Ihren Code wichtig. Wenn Sie einer Datei keinen absoluten Pfad geben, sieht sie relativ zu dem Skript aus, das vom PHP-Interpreter ausgeführt wird. Und nein, verschiedene PHP-Interpreter-Instanzen können und dürfen keine Daten untereinander austauschen. – Anand

2

php.ini wird gelesen, wenn das Modul im Falle eines Apache-Moduls geladen wird. PHP CGI verwendet einen PHP-Interpreter wie jedes andere Shell-Skript. Da bei jedem Aufruf kein Zustand involviert ist, müsste die Konfigurationsdatei im Falle von CGI jedes Mal gelesen werden.

+0

Bitte lesen Sie den Kommentar, den ich gerade auf die andere Antwort geschrieben habe. Sehen Sie, wenn Sie das bekommen könnten! –