Heim  >  Artikel  >  Backend-Entwicklung  >  Verstehen Sie den Ausführungsprozess von PHP7?

Verstehen Sie den Ausführungsprozess von PHP7?

藏色散人
藏色散人nach vorne
2021-09-12 16:24:081834Durchsuche

PHP ist eine interpretierte Sprache. Ihr Ausführungsprozess muss zuerst in Zwischencode kompiliert und dann zur Ausführung über eine bestimmte virtuelle Maschine in spezifische Anweisungen übersetzt werden. Der Ausführungsprozess ist wie folgt:
PHP 代码 => Token => 抽象语法树 => Opcodes => 执行

Der Inhalt jedes Schritts ist wie folgt:
Der Quellcode erhält ein Token durch lexikalische Analyse. Token ist eine aussagekräftige Kennung, in die der PHP-Code eingeschnitten wird. PHP7 verfügt über insgesamt 137 Tokens, die in der Datei zend_lingual_parser.h definiert sind.

Token in Abstract Syntax Tree (AST) basierend auf dem Syntaxanalysator umwandeln

Token ist ein Wortblock, aber ein einzelner Wortblock kann keine vollständige Semantik ausdrücken, und für die Organisation und Verbindung sind bestimmte Regeln erforderlich. Daher muss der Parser das Token entsprechend der Grammatik abgleichen und die Token verketten. Das Produkt, nachdem der Syntaxanalysator die Token verkettet, ist ein abstrakter Syntaxbaum (AST).

AST ist eine neue Funktion der PHP7-Version. Die vorherige Version des PHP-Codes hat während des Ausführungsprozesses kein AST generiert. Seine Hauptfunktion besteht darin, den PHP-Compiler und -Interpreter zu entkoppeln und die Wartbarkeit zu verbessern.

Syntaxbaum in Opcode konvertieren

Sie müssen den Syntaxbaum in Opcode konvertieren, bevor er direkt von der Engine ausgeführt werden kann.

Opcodes ausführen

opcodes ist eine Sammlung von Opcodes, bei denen es sich um Zwischencodes während der PHP-Ausführung handelt. Eine der gebräuchlichsten PHP-Engineering-Optimierungsmaßnahmen ist „Turn on Opcache“, was sich auf die Technologie zum Zwischenspeichern von Opcodes bezieht. Durch den Wegfall der Phase vom Quellcode zum Opcode führt die Engine den zwischengespeicherten Opacode direkt aus, um die Leistung zu verbessern.

PHP7-Kernel-Architektur


Verstehen Sie den Ausführungsprozess von PHP7?

Zend-Engine

Lexikalische/grammatische Analyse, AST-Kompilierung und Opcode-Ausführung sind alle in der Zend-Engine implementiert. Darüber hinaus werden das Variablendesign, die Speicherverwaltung, die Prozessverwaltung usw. von PHP auch auf der Engine-Ebene implementiert.

PHP-Schicht

zend-Engine bietet grundlegende Funktionen für PHP, während Interaktionen von außen über die PHP-Schicht abgewickelt werden müssen.

SAPI

Abkürzung für Server-API, die die CLI-SAPI und die FPM-SAPI der Szene enthält. Externe Module können mit PHP interagieren, solange sie sich an das definierte SAPI-Protokoll halten.

Der Erweiterungsteil

kann basierend auf den Kernfunktionen und Schnittstellenspezifikationen der Zend-Engine entwickelt und erweitert werden.

PHP 7-Quellcodestruktur

Die Hauptquellverzeichnisse von PHP 7 sind: sapi, Zend, main, ext und TSRM. Das
Sapi-Verzeichnis
Das Sapi-Verzeichnis ist eine Abstraktion der Eingabe- und Ausgabeebenen und die Spezifikation für PHP zur Bereitstellung externer Dienste.
Mehrere häufig verwendete SAPIs:
1) Apache2handler: Apache-Erweiterung, kompiliert, um eine dynamische Linkbibliothek zu generieren, konfiguriert unter Apache. Wenn eine HTTP-Anfrage an Apache vorliegt, wird diese dynamische Linkbibliothek entsprechend der Konfiguration aufgerufen, um den PHP-Code auszuführen und die Interaktion mit PHP abzuschließen.
2) cgi-fcgi: Nach der Kompilierung wird ein ausführbares Programm generiert, das das CGI-Protokoll unterstützt. Der Webserver (z. B. NGINX) leitet die Anforderung über das CGI-Protokoll an den CGI-Prozess weiter Anfrage und gibt das Ausführungsergebnis an den Webserver zurück.
3) fpm-fcgi: fpm ist der FastCGI-Prozessmanager. Am Beispiel des NGINX-Servers: Wenn eine Anfrage an den NGINX-Server gesendet wird, übergibt NGINX die Anfrage gemäß dem FastCGI-Protokoll an den PHP-FPM-Prozess.
4) cli: Die interaktive Befehlszeilenschnittstelle von PHP.
Zend-Verzeichnis.
Zend-Verzeichnis ist der Kerncode von PHP. Speicherverwaltung, Speicherbereinigung, Prozessverwaltung, Variablen, Array-Implementierung usw. in PHP befinden sich alle im Quellcode dieses Verzeichnisses.

Hauptverzeichnis

Das Hauptverzeichnis ist der Klebstoff zwischen der SAPI-Schicht und der Zend-Schicht. Die Zend-Schicht implementiert die Kompilierung und Ausführung von PHP-Skripten, die Sapi-Schicht implementiert die Abstraktion von Eingabe und Ausgabe und das Hauptverzeichnis spielt eine verbindende Rolle zwischen ihnen. Darüber hinaus analysiert es die SAPI-Anfrage und analysiert die auszuführenden Skriptdateien und Parameter. Andererseits führt es die erforderliche Modulinitialisierung und andere Arbeiten durch, bevor die Zend-Engine aufgerufen wird.

ext-Verzeichnis

ext ist ein Verzeichnis, das sich auf PHP-Erweiterungen bezieht. Hier werden häufig verwendete Array-, Str-, PDO- und andere Funktionsreihen definiert.

TSRM

TSRM (Thread Safe Resource Manager) – Thread Safe Resource Manager wird verwendet, um die Sicherheit der Ressourcenfreigabe zu gewährleisten.

Das obige ist der detaillierte Inhalt vonVerstehen Sie den Ausführungsprozess von PHP7?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen