Heim >Backend-Entwicklung >PHP-Problem >Wie PHP analysiert wird
Um den Parsing-Prozess von PHP zu verstehen, müssen Sie zunächst die verwandten Konzepte von CGI, FastCGI und PHP-FPM verstehen.
Was ist CGI?
cgi (Common Gateway Interface) ist eigentlich ein Protokoll. Das Programm, das das CGI-Protokoll implementiert, kann als CGI-Anwendung bezeichnet werden und kann auch mit der Datenbank-API kommunizieren mit externen Datenquellen wie Datenbankservern und beziehen Daten von den Datenbankservern. Nach der Formatierung in ein HTML-Dokument wird es an den Browser gesendet, oder die vom Browser erhaltenen Daten können in die Datenbank übernommen werden. Und php-cgi ist ein Protokoll zum Parsen von PHP-Code. Diese Vereinbarung hat jedoch mehrere Nachteile.
Wenn der Client eine PHP-Skriptdatei anfordert, forkt der Server zunächst einen Prozess auf und ruft den Parser auf, um das Skript zu analysieren. Wenn das Skript ausgeführt wird, wird der Prozess beendet wird php.ini durchgehen, um die Umgebung zu initialisieren. Der Prozess kann nicht wiederverwendet werden und der E/A-Overhead von php.ini wird erhöht. Begrenzt die Ausführungsgeschwindigkeit von PHP. Also entwickelte der intelligente PHP-Anbieter ein besseres CGI-Protokoll, nämlich das FastCGI-Protokoll, das später herauskam.
FastCGI-Protokoll
Gu Ming dachte, schnelleres CGI-Protokoll. Wo ist er also bald?
Fastcg löst zunächst die Probleme des ursprünglichen PHP-CGI. Es ermöglicht die Verarbeitung mehrerer Anforderungen in einem Prozess, anstatt den Prozess direkt nach der Verarbeitung einer Anforderung zu beenden den Webserver verbessern. Tatsächlich startet Fastcgi zunächst einen Master, analysiert die Konfigurationsdatei, initialisiert die Ausführungsumgebung und startet dann mehrere Worker.
Wenn eine Anfrage eingeht, leitet der Meister sie an einen Arbeiter weiter und dann kann die nächste Anfrage sofort angenommen werden. Das vermeidet Doppelarbeit und ist natürlich hocheffizient. Und wenn nicht genügend Arbeiter vorhanden sind, kann der Master je nach Konfiguration mehrere Arbeiter vorab starten und warten. Wenn zu viele Arbeiter im Leerlauf sind, werden natürlich einige gestoppt, was die Leistung verbessert und Ressourcen spart.
php-fpm
PHP-FPM (FastCGI Process Manager: FastCGI Process Manager) ist ein PHPFastCGI-Manager für PHP vor PHP 5.3.3, ein Patch-Paket, das entwickelt wurde um das FastCGI-Prozessmanagement in PHP-Pakete zu integrieren.
Wenn Sie PHP vor PHP5.3.3 verwenden, müssen Sie es in Ihren PHP-Quellcode patchen und können es nach dem Kompilieren und Installieren von PHP verwenden. Tatsächlich können wir uns php-fpm als einen Interpreter vorstellen. Wir können den Befehl ps -aux | verwenden, um den entsprechenden Prozessstatus anzuzeigen, wie unten gezeigt:
Mit php-fpm können allgemeine Änderungen reibungslos neu gestartet werden Nach php.ini kann der php-cgi-Prozess nicht reibungslos neu gestartet werden, was bedeutet, dass Sie den Dienst neu starten müssen, um die neue Konfiguration neu zu laden. Der PHP-FPM-Verarbeitungsmechanismus hierfür besteht darin, dass neue Arbeiter neue Konfigurationen verwenden und bestehende Arbeiter sich nach der Verarbeitung der anstehenden Arbeit ausruhen können. Dieser Mechanismus wird verwendet, um den Übergang zu erleichtern.
PHP-Code-Parsing-Prozess:
1. Scannen (Lexing), Konvertieren von PHP-Code in Sprachfragmente (Tokens).
2. Parsen, Konvertieren von Tokens in einfache und aussagekräftige Ausdrücke.
3. Kompilierung, Ausdrücke in Opocdes kompilieren.
4. Ausführung: Führen Sie die Opcodes nacheinander aus, um die Funktion des PHP-Skripts zu realisieren.
Heutzutage können einige Caches, wie z. B. APC, PHP in die Lage versetzen, Opcodes zwischenzuspeichern. Auf diese Weise müssen die ersten drei Schritte nicht jedes Mal wiederholt werden, was zu einer erheblichen Verbesserung führen kann die Ausführungsgeschwindigkeit von PHP.
Empfohlenes Tutorial: PHP-Video-Tutorial
Das obige ist der detaillierte Inhalt vonWie PHP analysiert wird. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!