Maison >développement back-end >tutoriel php >Quelle est la composition de PHP ? Quel est le cycle de vie ?
Cet article va vous présenter quelle est la composition de PHP ? Quel est le cycle de vie ? . Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.
1. Adresse de téléchargement du code open source PHP :
https://github.com/php/php-src.git
2 La composition de PHP
1. >
2. Analyse d'annuaire (1) Le répertoire sapi est la couche d'interface d'application de PHP. (2) main est le code principal de PHP, principalement les entrées/sorties, la communication Web, les opérations d'initialisation du framework PHP, etc., telles que l'analyse du protocole fastcgi, le chargement d'extensions, l'analyse de la configuration PHP, etc. Fait ici. (3) Le répertoire Zend est la principale implémentation de l'analyseur PHP, à savoir ZendVM, qui est l'implémentation principale du langage PHP. L'interprétation et l'exécution du code PHP sont réalisées par Zend. (4) Le répertoire ext est le répertoire d'extension de PHP, tel que l'extension curl de PHP, l'extension de bibliothèque gd, l'extension pdo, etc. (5) Le répertoire TSRM est une implémentation liée à la sécurité des threads. (6) Diagramme de relations entre les différents composants de PHP :3. >(1) PHP est un analyseur de script qui fournit l'analyse et l'exécution de scripts. Son entrée est du texte ordinaire, qui est ensuite analysé et exécuté par l'analyseur PHP selon des règles de grammaire prédéfinies. Nous pouvons appliquer cet analyseur dans différents environnements, tels que la ligne de commande, l'environnement Web et l'intégrer dans d'autres applications. A cette fin, PHP fournit une couche SAPI pour s'adapter aux différents environnements applicatifs. SAPI peut être considéré comme l'environnement hôte de PHP.
(2) SAPI est également la partie la plus externe de l'ensemble du framework PHP. Il est principalement responsable de l'initialisation du framework PHP. Le code SAPI se trouve dans le répertoire /sapi du code source PHP. Les deux SAPI fréquemment utilisés sont Cli et Fpm.4. ZendVM
(1) ZendVM est un ordinateur virtuel, qui se situe entre les applications PHP et les ordinateurs réels. Le code PHP que nous écrivons est interprété par celui-ci. ZendVM est l'implémentation principale du langage PHP. Elle se compose principalement de deux parties : le compilateur et l'exécuteur.
(2) Le compilateur est responsable de l'interprétation de PHP en instructions pouvant être reconnues par l'exécuteur, et l'exécuteur est responsable de l'exécution des instructions interprétées par le compilateur. (3) Le rôle de ZendVM est équivalent à celui de la JVM en Java. Ce sont tous deux des ordinateurs virtuels abstraits.5. Extension
(1) L'extension est un ensemble de moyens fournis par le noyau PHP pour étendre les fonctions PHP. Il existe une multitude d'extensions disponibles dans PHP. Community Utilisées, ces extensions apportent à PHP un grand nombre de fonctions pratiques De nombreuses fonctions opérationnelles en PHP sont assurées via des extensions.
(2) Grâce à l'extension, nous pouvons utiliser C/C++ pour obtenir des fonctions plus puissantes et des performances plus élevées. Les extensions sont divisées en extensions PHP et les extensions Zend sont plus courantes, tandis que les extensions Zend sont principalement utilisées dans ZendVM. Le célèbre Opcache est l'extension Zend.3. Cycle de vie de PHP
1. L'ensemble du cycle de vie de PHP est divisé en les étapes suivantes :
(1) Phase d'initialisation du module (démarrage du module) (2) phase d'initialisation de la demande (demande de démarrage) (3) phase d'exécution du script (exécution du script) (4) phase de clôture de la demande (demande shutdown) (5) Phase d'arrêt du module (arrêt du module) Remarque : En fonction de la mise en œuvre des différents SAPI, il y aura quelques différences dans l'exécution de chaque étape, par exemple. En mode ligne de commande, chaque fois que l'exécution d'un script passera par ces étapes. En mode FastCgi, l'initialisation du module est effectuée une fois au démarrage, puis chaque requête passe uniquement par les étapes d'initialisation de la requête, d'exécution du script et de fermeture de la requête. Lorsque SAPI est fermé, elle ne passe que par l'étape de fermeture du module.2. Phase d'initialisation du module - analyse
(1) Cette phase réalise principalement les opérations d'initialisation du framework PHP et du moteur Zend. La fonction d'entrée de cette étape est php_module_startup(). Cette étape n'est généralement exécutée qu'une seule fois au démarrage de SAPI. Pour Fpm, elle est exécutée au démarrage du processus maître de Fpm.
(2) Plusieurs processus principaux de cette étape sont les suivants :
(3) Activer SAPI : sapi_activate(), initialiser les informations de demande SG (request_info), définir le handle de lecture des requêtes POST, etc.
(4) Démarrez la sortie PHP : php_output_startup()
(5) Initialisez le garbage collector : gc_globals_ctor() et allouez de la mémoire zend_gc_globals.
(6) Démarrez le moteur Zend : zend_startup(), les opérations principales incluent
(6.1) Démarrez le pool de mémoire start_memory_manager()
(6.2) Définissez des utilitaires handles de fonction, tels que zend_error_cb, zend_pringf, zend_write, etc.
(6.3) Définir la compilation de la machine virtuelle Zend, la fonction exécuteur gère zend_compile_file, zend_execute_ex, la fonction de récupération de place gc_collect_cycles
(6.4) Allouer la table des symboles de fonction, la table des symboles de méthode (function_table), la classe Symbol table (class_table), table de symboles constants (zend_constants), etc., si elle est multithread, les variables globales du compilateur et de l'exécuteur seront également allouées.
(6.5) Enregistrez l'extension principale de Zend : zend_startup_builtin_funtions(), cette extension est fournie par le noyau. Ce processus enregistrera les fonctions fournies par l'extension principale de Zend, telles que strlen, definition, func_get_args, class_exists, etc.
(6.6) Enregistrez les constantes standards définies par Zend : zend_register_standard_constants(), telles que E_ERROR, E_WARNING, E_ALL, TRUE, FALSE, etc.
(6.7) Enregistrez le handle d'obtention de la super variable globale $GLOBALS.
(6.8) Allouez la table de symboles de stockage EG (ini_directives) configurée dans php.ini.
(7) Enregistrez les constantes définies par PHP : PHP_VERSION, PHP_ZTS, PHP_SAPI, etc.
(8) Analyser php.ini : une fois l'analyse terminée, toutes les configurations php.ini sont enregistrées dans la table de hachage configuration_hash.
(9) Mappage de la configuration php.ini de PHP et Zend core : obtenez la valeur de configuration correspondante basée sur le php.ini analysé et insérez la configuration finale dans la table de hachage EG (ini_directives).
(10) Enregistrez les descripteurs pour obtenir les variables $_GET, $_POST, $_COOKIE, $_SERVER, $_ENV, $_REQUEST, $_FILES.
(11) Enregistrez les extensions compilées statiquement : php_register_internal_extensions_func().
(12) Enregistrez les extensions chargées dynamiquement : php_init_register_extensions(), chargez les extensions configurées dans php.ini dans PHP.
(13) Rappelez la fonction de hook de démarrage du module définie par chaque extension, c'est-à-dire la fonction définie via PHP_MINIT_FUNCTION().
(14) Enregistrez les fonctions et classes désactivées dans php.ini : Disable_funstions, Disable_classes.
3. Phase d'initialisation de la demande - analyse
Cette phase est une étape par laquelle passera chaque demande avant le traitement de la demande. Pour fpm, il s'agit d'une étape après que le processus de travail accepte une demande et obtient et analyse les données de la demande. La fonction de traitement à ce stade est php_request_startup().
Le traitement principal est le suivant :
(1) Activer la sortie : php_output_activate()
(2) Activer le moteur Zend : zend_activate(), les opérations principales sont
(2.1) Réinitialiser le garbage collector : gc_reset()
(2.2) Initialiser le compilateur : ini_compiler()
(2.3) Initialiser l'exécuteur : ini_exexutor(), will EG(function_table) et EG(class_table) exécutent respectivement CG(function_table) et CG(class_table).
(2.4) Initialiser la table de symboles de variables globales EG (symbol_table), table de symboles de fichiers inclus EG (inclus_files)
(2.5) Initialiser le scanner lexical : sapi_activate()
( 3) Activer SAPI : sapi_activate()
(4) Rappeler une définition étendue de la fonction de hook de démarrage de la requête : zend_activate_modules()
Phase d'exécution du script - analyse
5. Phase de clôture de la demande - analyse
(1) Cette phase videra le contenu de sortie, enverra les en-têtes de réponse HTTP, nettoiera les variables locales, fermera le compilateur, et fermer l'actionneur, etc. (2) De plus, la fonction de hook d'arrêt de demande de chaque extension sera rappelée à ce stade. (3) Cette phase est à l'opposé de la phase d'initialisation de la requête.6. Phase d'arrêt du module - analyse
Cette phase est exécutée à la fermeture de SAPI et correspond à la phase d'initialisation du module. Elle nettoie principalement les ressources et ferme chaque module PHP. .Opération, et en même temps, la fonction de hook d'arrêt du module de chaque extension sera rappelée. Apprentissage recommandé :Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!