Heim > Artikel > Backend-Entwicklung > Fünf wichtige PHP-Betriebsmodi
Die fünf gängigen Betriebsmodi von PHP sind CGI (Common Gateway Interface/Common Gateway Interface), FastCGI (Resident CGI/Long-Live CGI), CLI (Command Line Interface), Webmodulmodus (der Modus, in dem Webserver wie Apache ausgeführt werden), ISAPI (Internet Server Application Program Interface), hoffe ich Dieser Artikel kann jedem helfen.
Hinweis: Nach PHP5.3 verfügt PHP nicht mehr über den ISAPI-Modus und die Datei php5isapi.dll existiert nach der Installation nicht mehr. Um eine höhere Version von PHP auf IIS6 zu verwenden, müssen Sie die FastCGI-Erweiterung installieren und dann IIS6 für die Unterstützung von FastCGI aktivieren.
1.1. CGI-Modus
CGI ist das Common Gateway Interface, das für Laien ein Programm ist. CGI ist wie eine Brücke, die die Webseite und das Ausführungsprogramm im Webserver verbindet. Es leitet die von HTML empfangenen Anweisungen an das Ausführungsprogramm des Servers weiter und gibt dann die Ergebnisse des Ausführungsprogramms des Servers an die HTML-Seite zurück. CGI bietet eine hervorragende plattformübergreifende Leistung und kann auf nahezu jedem Betriebssystem implementiert werden. CGI ist bereits ein älteres Modell und wurde in den letzten Jahren nur noch selten eingesetzt.
Jedes Mal, wenn eine Benutzeranfrage vorliegt, wird zuerst ein CGI-Unterprozess erstellt, dann wird die Anfrage verarbeitet und der Unterprozess wird nach der Verarbeitung beendet der Fork-and-Execute-Modus. Wenn die Anzahl der Benutzeranforderungen sehr groß ist, werden große Mengen an Systemressourcen wie Speicher, CPU-Zeit usw. belegt, was zu einer geringen Leistung führt. Daher verfügt ein Server, der CGI verwendet, über so viele CGI-Unterprozesse wie Verbindungsanforderungen. Das wiederholte Laden von Unterprozessen ist der Hauptgrund für die geringe CGI-Leistung.
Wenn Sie PHP nicht in serverseitige Software (wie Apache) einbetten und als Modul installieren möchten, können Sie es im CGI-Modus installieren. Oder verwenden Sie PHP mit verschiedenen CGI-Wrappern, um sichere Chroot- und Setuid-Umgebungen für Ihren Code zu erstellen. Auf diese Weise fordert jeder Client eine PHP-Datei an, und der Webserver ruft php.exe (php.exe unter Win, php unter Linux) auf, um die Datei zu interpretieren, und gibt dann das Ergebnis der Interpretation in Form von an den Client zurück eine Webseite. Diese Installationsmethode installiert normalerweise die ausführbare PHP-Datei im cgi-bin-Verzeichnis des Webservers. Die CERT-Empfehlung CA-96.11 empfiehlt, keine Interpreter im cgi-bin-Verzeichnis abzulegen. Der Vorteil dieser Methode besteht darin, dass sie den Webserver von der spezifischen Programmverarbeitung trennt und eine klare Struktur und starke Kontrollierbarkeit aufweist. Gleichzeitig besteht der Nachteil darin, dass der CGI-Prozess Fork zu einem riesigen Server wird Stellen Sie sich vor, dass Hunderte gleichzeitiger Anforderungen dazu führen, dass der Server Hunderte von Prozessen aufteilt, und Sie werden es verstehen. Aus diesem Grund war CGI schon immer für seine geringe Leistung und seinen hohen Ressourcenverbrauch bekannt.
1.2, FastCGI-Modus
FastCGI ist eine aktualisierte Version von CGI. Es kann wie ein langlebiges CGI ausgeführt werden Solange es aktiviert ist, dauert der Fork nicht jedes Mal (dies ist der am meisten kritisierte Fork-and-Execute-Modus von CGI).
FastCGI ist eine skalierbare Hochgeschwindigkeitsschnittstelle für die Kommunikation zwischen HTTP-Servern und dynamischen Skriptsprachen. Die meisten gängigen HTTP-Server unterstützen FastCGI, darunter Apache, Nginx und lighttpd. Gleichzeitig wird FastCGI auch von vielen Skriptsprachen unterstützt, darunter PHP.
Der FastCGI-Schnittstellenmodus verwendet eine C/S-Struktur, die den HTTP-Server und den Skript-Parsing-Server trennen und gleichzeitig einen oder mehrere Skript-Parsing-Daemons auf dem Skript-Parsing-Server starten kann. Jedes Mal, wenn der HTTP-Server auf ein dynamisches Programm trifft, kann es zur Ausführung direkt an den FastCGI-Prozess übermittelt und das Ergebnis dann an den Browser zurückgegeben werden. Mit dieser Methode kann der HTTP-Server ausschließlich statische Anforderungen verarbeiten oder die Ergebnisse des dynamischen Skriptservers an den Client zurückgeben, was die Leistung des gesamten Anwendungssystems erheblich verbessert.
[Prinzip]
1) Der FastCGI-Prozessmanager (IIS ISAPI oder Apache-Modul) wird geladen, wenn der Webserver startet
2) Der FastCGI-Prozessmanager initialisiert sich selbst und startet mehrere CGI-Interpreterprozess (mehrere php-cgi.exe oder php-cig sichtbar) und auf die Verbindung vom Webserver warten
3) Wenn die Client-Anfrage den Webserver erreicht, wählt der FastCGI-Prozessmanager eine Verbindung aus an einen CGI-Interpreter. Der Webserver sendet die CGI-Umgebungsvariablen und Standardeingaben an den FastCGI-Unterprozess php-cgi
4) Nachdem der FastCGI-Unterprozess die Verarbeitung abgeschlossen hat, gibt er die Standardausgabe und Fehlerinformationen an den Webserver zurück aus derselben Verbindung. Wenn der untergeordnete FastCGI-Prozess die Verbindung schließt, wird die Anfrage verarbeitet. Der untergeordnete FastCGI-Prozess wartet dann auf die nächste Verbindung vom FastCGI-Prozessmanager (der in WebServer ausgeführt wird) und verarbeitet diese. Im normalen CGI-Modus wird php-cgi.exe hier beendet.
Im CGI-Modus können Sie sich vorstellen, wie langsam CGI normalerweise ist. Jede Webanfrage an PHP muss php.ini neu analysieren, alle DLL-Erweiterungen neu laden und alle Datenstrukturen neu initialisieren. Bei FastCGI geschieht dies alles nur einmal, nämlich beim Start des Prozesses. Ein zusätzlicher Bonus besteht darin, dass dauerhafte Datenbankverbindungen funktionieren.
Hinweis: Der FastCGI-Prozessmanager von PHP ist PHP-FPM (PHP-FastCGI-Prozessmanager)
[Vorteile]
1) Von stabil Von a Aus Sicht der Leistung verwendet FastCGI einen unabhängigen Prozesspool, um CGI auszuführen. Wenn ein einzelner Prozess ausfällt, kann das System ihn problemlos verwerfen und dann einen neuen Prozess neu zuweisen, um die Logik auszuführen.
2) Aus Sicht der Sicherheit , FastCGI unterstützt verteiltes Rechnen. FastCGI ist völlig unabhängig vom Host-Server, egal wie stark FastCGI ausfällt, der Server wird dadurch nicht heruntergefahren.
3) Aus Leistungssicht trennt FastCGI die Verarbeitung der dynamischen Logik vom Server. Überlassen Sie die E/A-Verarbeitung mit hoher Auslastung immer noch dem Host-Server, damit sich der Host-Server auf E/A konzentrieren kann. Für eine normale dynamische Webseite gibt es möglicherweise nur einen kleinen Teil der logischen Verarbeitung und eine große Anzahl statischer Bilder und so weiter.
【Nachteile】
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 man Zend Studio zum Debuggen des Programms verwendet, 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. Die neue Version einiger Server bietet keine gute Unterstützung. Ist eine modulare Installation, die keinen verteilten Lastausgleich erfordert, die bessere Wahl? Die aktuelle Kommunikation zwischen FastCGI und dem Server ist nicht intelligent genug. Wenn die Ausführung eines FastCGI-Prozesses zu lange dauert, wird er abgebrochen und als toter Prozess neu gestartet. Dies ist bei der Verarbeitung langfristiger Aufgaben sehr problematisch um Online-Debugging zu ermöglichen. Da es sich um einen Multiprozess handelt, verbraucht er mehr Serverspeicher als CGI-Multithreading. Der PHP-CGI-Interpreter verbraucht 7 bis 25 Megabyte Speicher pro Prozess. Multipliziert man diese Zahl mit 50 oder 100, ist dies eine große Speichermenge.
1.3 CLI-Modus
PHP-CLI ist die Abkürzung für PHP Command Line Interface. Wie der Name schon sagt, wird PHP auf der Befehlszeile ausgeführt Die Schnittstelle unterscheidet sich von der PHP-Umgebung (PHP-CGI, ISAPI usw.), die auf dem Webserver läuft. Mit anderen Worten: PHP kann nicht nur Front-End-Webseiten schreiben, sondern auch zum Schreiben von Back-End-Programmen verwendet werden. PHP CLI Shell Scripting gilt für alle PHP-Vorteile und ermöglicht die Erstellung von serverseitigen Skripten oder System- oder sogar GUI-Anwendungen. Der PHP-CLI-Modus wird unter Windows und Linux unterstützt.
[Vorteile]
1) Bei Verwendung mehrerer Prozesse ist der Kernel nach Beendigung des untergeordneten Prozesses für das Recycling von Ressourcen verantwortlich.
2) Bei Verwendung mehrerer Prozesse ist der untergeordnete Prozess verantwortlich Der Prozess wird nicht abnormal beendet. Bewirkt, dass der gesamte Prozess-Thread beendet wird und der übergeordnete Prozess weiterhin die Möglichkeit hat, den Prozess neu zu erstellen. Ein residenter Hauptprozess, der nur für die Aufgabenverteilung verantwortlich ist. Die Logik ist klarer.;
3) Geplante Aufgaben können implementiert und Shell-Skripte können mit PHP unter Linux geschrieben werden.
Unter Linux verwenden wir häufig „php -m“, um herauszufinden, welche Erweiterungen PHP installiert hat. Dies ist der PHP-Befehlszeilen-Ausführungsmodus. Interessierte Schüler können „php -h“ eingeben, um diesen Ausführungsmodus eingehend zu studieren .
1.4 Modulmodus
Der Modulmodus ist in Form des Moduls mod_php5 integriert. Zu diesem Zeitpunkt besteht die Funktion des Moduls mod_php5 darin, zu empfangen PHP übergibt Dateianforderungen an Apache, verarbeitet diese Anforderungen und gibt die verarbeiteten Ergebnisse an Apache zurück. Wenn wir das PHP-Modul
(mod_php5) in seiner Konfigurationsdatei konfigurieren, bevor Apache startet, registriert das PHP-Modul den ap_hook_post_config-Hook von Apache2 und startet dieses Modul, wenn Apache beginnt, Anfragen für PHP-Dateien anzunehmen.
Zusätzlich zu dieser Lademethode beim Start können die Module von Apache zur Laufzeit dynamisch geladen werden, was bedeutet, dass der Server erweitert werden kann, ohne dass der Quellcode neu kompiliert werden muss oder der Server überhaupt angehalten werden muss. Wir müssen lediglich das Signal HUP oder AP_SIG_GRACEFUL an den Server senden, um den Server zu benachrichtigen, das Modul neu zu laden. Vor dem dynamischen Laden müssen wir das Modul jedoch in eine dynamische Linkbibliothek kompilieren. Beim dynamischen Laden wird zu diesem Zeitpunkt die dynamische Linkbibliothek geladen. Die Verarbeitung dynamischer Linkbibliotheken in Apache wird über das Modul mod_so abgeschlossen, sodass das Modul mod_so nicht dynamisch geladen, sondern nur statisch in den Kern von Apache kompiliert werden kann. Dies bedeutet, dass es zusammen mit Apache gestartet wird.
Wie lädt Apache Module? Nehmen wir als Beispiel das zuvor erwähnte Modul mod_php5. Zuerst müssen wir eine Zeile zur Apache-Konfigurationsdatei httpd.conf hinzufügen:
LoadModule php5_module module/mod_php5.so
Hier verwenden wir den LoadModule-Befehl, der erste Parameter des Befehls ist das Modul Der Name ist im Quellcode der Modulimplementierung zu finden. Die zweite Option ist der Pfad, in dem sich das Modul befindet. Wenn Sie ein Modul laden müssen, während der Server läuft, können Sie das Signal HUP oder AP_SIG_GRACEFUL an den Server senden. Sobald das Signal empfangen wird, lädt Apache das Modul neu, ohne den Server neu zu starten.
Dieser Betriebsmodus wird häufig verwendet, wenn der Apache-Server in der Windows-Umgebung verwendet wird. Bei der Modularisierung (DLL) wird PHP zusammen mit dem Webserver gestartet und ausgeführt. (Es handelt sich um eine auf CGI basierende Erweiterung von Apache, um die Betriebseffizienz von PHP zu beschleunigen.)
1.5 ISAPI-Modus
ISAPI (Internet Server Application Program Interface) ist eine Reihe von API-Schnittstellen für Internetdienste, die von Microsoft, einer ISAPI, bereitgestellt werden Die DLL kann sich nach der Aktivierung durch eine Benutzeranfrage im Speicher befinden und auf eine weitere Benutzeranfrage warten. Außerdem können in einer DLL mehrere Funktionen zur Verarbeitung von Benutzeranfragen festgelegt werden. Darüber hinaus befinden sich die ISAPI-DLL-Anwendung und der WWW-Server im selben Prozess. Die Effizienz ist deutlich höher als bei CGI. (Aufgrund der Exklusivität von Microsoft kann es nur in der Windows-Umgebung ausgeführt werden)
PHP ist ein Apache-Modul. Nachdem der Apache-Server das System gestartet hat, werden mehrere Prozesskopien vorab generiert und im Speicher gespeichert Wenn eine Anfrage auftritt, wird sie sofort verarbeitet. Verwenden Sie diese Ersatz-Unterprozesse für die Verarbeitung, damit es nicht zu Verzögerungen durch das Laichen von Unterprozessen kommt. Diese Serverkopien werden nicht sofort nach der Verarbeitung einer HTTP-Anfrage beendet, sondern bleiben auf dem Computer und warten auf die nächste Anfrage. Die Reaktion auf Client-Browseranfragen ist schneller und die Leistung ist höher.
Verwandte Empfehlungen:
Detaillierte Erläuterung der vier PHP-Betriebsmodi
Zusammenfassung der PHP-Betriebsmodi
Detailliertes Verständnis des PHP-Betriebsmodus_PHP-Tutorial
Das obige ist der detaillierte Inhalt vonFünf wichtige PHP-Betriebsmodi. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!