Ich habe PHP immer im ISAPI-Modus ausgeführt. Der größte Nachteil dieser Methode ist die schlechte Stabilität. Wenn PHP fehlschlägt, stirbt auch der Apache-Prozess. Später sah ich im Internet eine Einführung über die Ausführung von PHP im FastCGI-Modus. Die verschiedenen genannten Vorteile (Stabilität, Sicherheit, hohe Leistung) veranlassten mich, es auszuprobieren.
Allerdings lief es bei weitem nicht so reibungslos wie erwartet. Ich habe unzählige Male bei Google gesucht, konnte aber keine Informationen darüber finden, wie man Apache + FastCGI zum Ausführen von PHP unter Windows verwendet. Es gibt einige Leute, die IIS + FastCGI zum Ausführen von PHP verwenden. In einem der Artikel wurde erwähnt, dass Zend auch empfiehlt, PHP im FastCGI-Modus auszuführen ( http://phplens.com/phpeverywhere/fastcgi-php ).
Nach mehreren Stunden der Erkundung habe ich schließlich Apache 1.3 + FastCGI erfolgreich implementiert, um PHP auszuführen.
Vorbereitung:
Besuchen Sie zunächst http://www.fastcgi.com/dist/, um mod_fastcgi für Apache herunterzuladen. Ich verwende mod_fastcgi-2.4.2-AP13.dll. Kopieren Sie diese Datei nach dem Herunterladen in das Modulverzeichnis von Apache.
Laden Sie PHP herunter (ich verwende PHP-5.0.4), entpacken Sie es und ändern Sie die Datei php.ini nach Bedarf. Beachten Sie, dass Sie keine Dateien aus dem PHP-Verzeichnis in das Windows-Verzeichnis kopieren müssen.
Konfiguration ändern:
Ändern Sie dann die Datei httpd.conf und fügen Sie die folgenden Zeilen hinzu:
LoadModule fastcgi_module module/mod_fastcgi-2.4.2-AP13.dll
ScriptAlias /fcgi-php5/ "d:/usr/local/php-5.0.4/"
FastCgiServer „d:/usr/local/php-5.0.4/php-cgi.exe“ -Prozesse 3
# Hinweis: -processes 3 bedeutet hier das Starten von drei php-cgi.exe-Prozessen.
# Detaillierte Parameter von FastCgiServer finden Sie in der FastCGI-Dokumentation.
AddType application/x-httpd-fastphp5 .php
Aktion application/x-httpd-fastphp5 "/fcgi-php5/php-cgi.exe"
# Beschreibung: Ändern Sie die beiden fett gedruckten Wörter oben entsprechend dem Speicherort Ihrer PHP-Datei.
Nachdem die Änderung abgeschlossen ist, starten Sie Apache einfach neu.
FAQ:
Nach meinen vielen Experimenten werden die häufigsten Probleme hauptsächlich durch Pfade verursacht. Überprüfen Sie daher zunächst, ob alle Pfade in den Dateien php.ini und httpd.conf korrekt sind. Zweitens muss C:Windowsphp.ini umbenannt oder gelöscht werden, wenn PHP bereits im System installiert wurde.
Überprüfen Sie zweitens, ob das Verzeichnis, in dem sich die PHP-Datei befindet, über ausreichende Berechtigungen verfügt (ich habe es auf „Jeder – Vollzugriff“ gesetzt, Sie müssen auf Entwicklungsmaschinen jedenfalls nicht so viele Sicherheitsbeschränkungen berücksichtigen).
Vorteile der Ausführung von PHP im FastCGI-Modus:
Die Ausführung von PHP im FastCGI-Modus bietet mehrere große Vorteile. Das erste ist, dass bei einem PHP-Ausfall Apache nicht heruntergefahren wird, sondern der PHP-eigene Prozess abstürzt (FastCGI startet jedoch sofort einen neuen PHP-Prozess neu, um den abgestürzten Prozess zu ersetzen). Zweitens bietet der FastCGI-Modus beim Ausführen von PHP eine bessere Leistung als der ISAPI-Modus (ich habe ursprünglich ApacheBench zum Testen verwendet, aber vergessen, die Ergebnisse zu speichern. Wenn Sie interessiert sind, können Sie es selbst testen).
Schließlich können Sie PHP5 und PHP4 gleichzeitig ausführen. Unter Bezugnahme auf die Konfigurationsdatei unten wurden zwei virtuelle Hosts eingerichtet, einer mit PHP5 und der andere mit PHP4.
LoadModule fastcgi_module module/mod_fastcgi-2.4.2-AP13.dll
ScriptAlias /fcgi-php5/ "d:/usr/local/php-5.0.4/"
FastCgiServer „d:/usr/local/php-5.0.4/php-cgi.exe“ -Prozesse 3
ScriptAlias /fcgi-php4/ "d:/usr/local/php-4.3.11/"
FastCgiServer „d:/usr/local/php-4.3.11/php.exe“
Hören 80
NameVirtualHost *:80
DocumentRoot d:/www
Optionen Indizes FollowSymlinks MultiViews
Servername php5.localhost
AddType application/x-httpd-fastphp5 .php
Aktion application/x-httpd-fastphp5 "/fcgi-php5/php-cgi.exe"
IndexOptions FancyIndexing FoldersFirst
Optionen Indizes FollowSymLinks MultiViews
AllowOverride Keine
Befehl erlauben, verweigern
Von allen zulassen
Hören Sie 8080
NameVirtualHost *:8080
DocumentRootd:/www
Optionen Indizes FollowSymlinks MultiViews
Servername php4.localhost
AddType application/x-httpd-fastphp4 .php
Aktion application/x-httpd-fastphp4 "/fcgi-php4/php.exe"
Optionen Indizes FollowSymLinks MultiViews
AllowOverride Keine
Befehl erlauben, verweigern
Von allen zulassen
Bei Verwendung der obigen Konfiguration wird PHP5 beim Zugriff auf http://localhost/ und PHP4 beim Zugriff auf http://localhost:8080/ verwendet. Solange es richtig konfiguriert ist, können verschiedene virtuelle Hosts unterschiedliche PHP-Versionen verwenden.
Einige Nachteile des FastCGI-Modus:
Nachdem wir über die Vorteile gesprochen haben, sprechen wir über die Nachteile. Aus meiner tatsächlichen Verwendung heraus eignet sich der FastCGI-Modus besser für Server in Produktionsumgebungen. Für Entwicklungsmaschinen ist es jedoch nicht geeignet. Denn wenn Sie Zend Studio zum Debuggen des Programms verwenden, geht FastCGI davon aus, dass der PHP-Prozess abgelaufen ist, und gibt einen 500-Fehler auf der Seite zurück. Das war so ärgerlich, dass ich auf meinem Entwicklungscomputer wieder in den ISAPI-Modus wechselte.
Schließlich besteht im FastCGI-Modus unter Windows eine potenzielle Sicherheitslücke. Da ich keine Möglichkeit gefunden habe, SuEXEC in einer Windows-Umgebung zu implementieren, läuft der PHP-Prozess immer mit den höchsten Privilegien, was aus Sicherheitsgründen natürlich keine gute Nachricht ist.
Abschluss:
Die Anwendung von FastCGI in diesem Artikel befindet sich noch in einem sehr frühen Stadium und wird nur als Ausgangspunkt verwendet, in der Hoffnung, dass ausgereiftere Lösungen entstehen.