Heim Backend-Entwicklung PHP-Tutorial PHP-Erweiterung – Lebenszyklus- und Speicherverwaltung

PHP-Erweiterung – Lebenszyklus- und Speicherverwaltung

Nov 17, 2016 pm 02:06 PM
php

1. PHP-Quellcodestruktur

PHP verfügt über zwei Kernsubsysteme, ZE (Zend Engine) und PHP Core.
ZE ist für das Parsen von PHP-Skripten in Maschinencode (auch als Token bekannt) verantwortlich Diese Maschinencodes werden im Prozessraum ausgeführt. ZE ist auch für die Speicherverwaltung, die Verwaltung des Variablenbereichs und die Planungsverwaltung von PHP-Funktionen verantwortlich.

PHP Core ist für die Kommunikation mit der SAPI-Schicht verantwortlich; PHP Core bietet außerdem eine einheitliche Kontrollschicht für Safe_Mode- und Open_basedir-Prüfungen; PHP Core bietet außerdem eine Streams-Schicht für Datei- und Netzwerk-E/A-Vorgänge. Darunter umfasst SAPI (Server Application Programming Interface) normalerweise Nginx, Apache, IIS, CLI, CGI und andere Hostumgebungen.

PHP-Erweiterung ermöglicht die Kapselung verschiedener gängiger Vorgänge basierend auf ZE und PHP Core, wie z. B. Lesen und Schreiben von MySQL, Redis, Memcache, SQLite usw., Parsen von JSON, XML-Dateien, Soap, Sokcet, Curl-Netzwerkprotokoll Kapselung, Verschlüsselung, Entschlüsselung, Komprimierung und Dekomprimierung usw., Bildverarbeitung usw. Einige Erweiterungen implementieren eine bestimmte Funktion von Grund auf, z. B. die Verwendung von C für die Kommunikation mit Redis gemäß dem Redis-Kommunikationsprotokoll. Einige Erweiterungen rufen vorhandene Bibliotheken im System auf, z. B. die GB-Erweiterung für die Bildverarbeitung, die auf dem System installiert werden muss selbst. Die entsprechende gd-Bibliothek.
78 Erweiterungen sind im PHP-Quellcode php-5.6.24/ext enthalten.

Kurz gesagt: ZE und PHP Core stellen die Grundarchitektur bereit, und EXT (Erweiterung) stellt verschiedene Operationen in der Benutzerdomäne bereit.
Am Beispiel des PHP-5.6.24-Quellcodes entspricht ZE dem Ordner php-5.6.24/Zend, PHP Core entspricht dem Ordner php-5.6.24/main und die Erweiterung entspricht dem Ordner php -5.6.24/ext.

2. Lebenszyklus der PHP-Erweiterung

Wenn PHP den SAPI-Befehl empfängt, initialisiert und startet es zunächst sein Kernel-Subsystem. Am Ende des Startvorgangs des Kernel-Subsystems beginnt PHP mit dem Laden Der Erweiterungscode initialisiert die Erweiterung. Zu diesem Zeitpunkt ruft PHP die Modulinitialisierungsroutine (MINIT) jedes Moduls auf.

MINIT (Modulinitialisierung)
PHP ruft MINIT-bezogene Routinen auf und gibt jeder Erweiterung die Möglichkeit, interne Variablen zu initialisieren, Ressourcen zuzuweisen, Ressourcenhandhabungshandles zu registrieren und ihre eigenen Funktionen bei ZE zu registrieren, um Skripte beim Aufrufen zu erleichtern Bei diesen Funktionen weiß ZE, welcher Code ausgeführt werden soll

RINIT (Request Initialization)
Nachdem die Modulinitialisierung abgeschlossen ist, wartet PHP auf die Anfrage von SAPI. Wenn die SAPI-Anfrage empfangen wird, sendet ZE das angeforderte PHP Das Skript erstellt eine laufende Umgebung und ruft die RINIT-Funktion (Request Initialization) jeder Erweiterung auf, wodurch jede Erweiterung die Möglichkeit hat, bestimmte Umgebungsvariablen festzulegen, Ressourcen entsprechend der Anforderung zuzuweisen oder andere Aufgaben, wie z. B. Audits, auszuführen.

Die hier erwähnten SAPI-Anfragen sind in zwei Kategorien unterteilt: Apache, IIS und andere ausgereifte Webserver-SAPIs. Beim Start führt PHP zuerst MINIT aus und wartet dann auf Seitenanfragen von Benutzern wird nach dem Empfang der Anfrage ausgeführt; eine andere Art von SAPI-Anfrage sind CGI- oder CLI-SAPIs. Wenn PHP diese Art von SAPI-Anfrage empfängt, führt es RINIT unmittelbar nach der Ausführung von MINIT aus.

Wenn die RINIT-Anfrage initialisiert wird, übernimmt ZE die Kontrolle zurück und übersetzt das aktuell angeforderte Skript in Token, die letztendlich Opcodes (Operationscodes) darstellen. Während der Ausführung von Opcodes erfordert ein Opcode die Ausführung eines bestimmten Eine Erweiterungsfunktion, was bedeutet, dass ZE die relevanten Parameter an die geänderte Funktion bindet und die Kontrolle vorübergehend zur Ausführung an die Funktion übergibt, bis die Funktion ausgeführt wird.

RSHUTDOWN(Request Shutdown)
Nachdem das PHP-Skript ausgeführt wurde, ruft PHP jede erweiterte Anforderungs-Shutdown-Funktion (RSHUTDOWN) auf, um letzte Aufräumarbeiten durchzuführen (z. B. das Speichern von Sitzungsvariablen auf der Festplatte). Als nächstes führt ZE einen Bereinigungsprozess (Garbage Collection) durch, bei dem effektiv jede Variable, die während der vorherigen Anfrage verwendet wurde, gelöscht wird.

MSHUTDOWN(Module Shutdown)
Wenn RSHUTDOWN abgeschlossen ist, wartet PHP weiterhin auf andere Dokumentanforderungen von SAPI oder ein Shutdown-Signal. Für SAPIs wie CGI und CLI gibt es keine „nächste Anfrage“, sodass die SAPI sofort mit dem Herunterfahren beginnt. Während des Herunterfahrens durchläuft PHP erneut jede Erweiterung, ruft die Funktion zum Herunterfahren des Moduls (MSHUTDOWN) auf und fährt schließlich sein eigenes Kernel-Subsystem herunter.

GINIT
Globale Variablen initialisieren

GSHUTDOWN
Globale Variablen freigeben

MINFO
Legen Sie die Informationen des phpinfo-Moduls fest, phpinfo muss die Konfiguration nivellieren Informationen zu jeder Erweiterung

// main/php.h
 #define PHP_MINIT       ZEND_MODULE_STARTUP_N
 #define PHP_MSHUTDOWN   ZEND_MODULE_SHUTDOWN_N
 #define PHP_RINIT       ZEND_MODULE_ACTIVATE_N
 #define PHP_RSHUTDOWN   ZEND_MODULE_DEACTIVATE_N
 #define PHP_MINFO       ZEND_MODULE_INFO_N
 #define PHP_GINIT       ZEND_GINIT
 #define PHP_GSHUTDOWN   ZEND_GSHUTDOWN

 #define PHP_MINIT_FUNCTION      ZEND_MODULE_STARTUP_D
 #define PHP_MSHUTDOWN_FUNCTION  ZEND_MODULE_SHUTDOWN_D
 #define PHP_RINIT_FUNCTION      ZEND_MODULE_ACTIVATE_D
 #define PHP_RSHUTDOWN_FUNCTION  ZEND_MODULE_DEACTIVATE_D
 #define PHP_MINFO_FUNCTION      ZEND_MODULE_INFO_D
 #define PHP_GINIT_FUNCTION      ZEND_GINIT_FUNCTION
 #define PHP_GSHUTDOWN_FUNCTION  ZEND_GSHUTDOWN_FUNCTION
Nach dem Login kopieren

3. PHP erweiterte Speicherverwaltung

Wenn ZE seine eigene interne Speicherverwaltung durchführt, verwendet es zusätzliche Flags, um zu identifizieren, ob eine bestimmte Speichervariable vorhanden ist ist Es ist persistent. ZE bereinigt ihn. Es ist jedoch am besten, den nicht persistenten Speicher innerhalb der Erweiterung selbst zu bereinigen, da der von der Erweiterung selbst zugewiesene nicht persistente Speicher lange Zeit nicht wiederverwendet wird und die damit verbundenen Ressourcen daher nicht lange freigegeben werden Zeit.


Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

CakePHP-Projektkonfiguration CakePHP-Projektkonfiguration Sep 10, 2024 pm 05:25 PM

In diesem Kapitel werden wir die Umgebungsvariablen, die allgemeine Konfiguration, die Datenbankkonfiguration und die E-Mail-Konfiguration in CakePHP verstehen.

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

CakePHP Datum und Uhrzeit CakePHP Datum und Uhrzeit Sep 10, 2024 pm 05:27 PM

Um in cakephp4 mit Datum und Uhrzeit zu arbeiten, verwenden wir die verfügbare FrozenTime-Klasse.

CakePHP-Datei hochladen CakePHP-Datei hochladen Sep 10, 2024 pm 05:27 PM

Um am Datei-Upload zu arbeiten, verwenden wir den Formular-Helfer. Hier ist ein Beispiel für den Datei-Upload.

CakePHP-Routing CakePHP-Routing Sep 10, 2024 pm 05:25 PM

In diesem Kapitel lernen wir die folgenden Themen im Zusammenhang mit dem Routing kennen.

Besprechen Sie CakePHP Besprechen Sie CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP ist ein Open-Source-Framework für PHP. Es soll die Entwicklung, Bereitstellung und Wartung von Anwendungen erheblich vereinfachen. CakePHP basiert auf einer MVC-ähnlichen Architektur, die sowohl leistungsstark als auch leicht zu verstehen ist. Modelle, Ansichten und Controller gu

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein Dec 20, 2024 am 11:31 AM

Visual Studio Code, auch bekannt als VS Code, ist ein kostenloser Quellcode-Editor – oder eine integrierte Entwicklungsumgebung (IDE) –, die für alle gängigen Betriebssysteme verfügbar ist. Mit einer großen Sammlung von Erweiterungen für viele Programmiersprachen kann VS Code c

CakePHP erstellt Validatoren CakePHP erstellt Validatoren Sep 10, 2024 pm 05:26 PM

Der Validator kann durch Hinzufügen der folgenden zwei Zeilen im Controller erstellt werden.

See all articles