Cet article explique en détail le mécanisme de fonctionnement sous-jacent de PHP, y compris le fonctionnement du contenu PHP, et explique le cycle de vie complet de PHP, du démarrage à l'arrêt, avec des exemples.
Introduction
Nous n'avons jamais démarré manuellement le processus lié à PHP, il s'exécute au démarrage d'Apache ; PHP est connecté à Apache via le module mod_php5.so (plus précisément, SAPI, l'interface de programmation d'application serveur
PHP a un total de trois modules) : le noyau, le moteur Zend et la couche d'extension ; le noyau PHP est utilisé pour gérer les requêtes, les flux de fichiers, la gestion des erreurs et d'autres opérations associées ; le moteur Zend (ZE) est utilisé pour convertir les fichiers sources en langage machine, puis l'exécuter sur une machine virtuelle ; La couche d'extension est un ensemble de fonctions, de bibliothèques et de flux que PHP utilise pour effectuer des opérations spécifiques. Par exemple, nous avons besoin de l'extension mysql pour nous connecter à la base de données MySQL ; lorsque ZE exécute le programme, il peut avoir besoin de se connecter à plusieurs extensions. À ce stade, ZE passe le contrôle à l'extension et le rend après avoir traité la tâche spécifique. ;
enfin, ZE renvoie les résultats d'exécution du programme au noyau PHP, qui transmet ensuite les résultats à la couche SAPI et les envoie enfin au navigateur.
Il n’est pas si simplede se plonger dans
les rouages de la réalité. Le processus ci-dessus n’est qu’une version simplifiée, creusons un peu plus pour voir ce qui se passe d’autre dans les coulisses.
◆Après le démarrage d'Apache, l'interpréteur PHP démarre également ;
◆Le processus de démarrage de PHP comporte deux étapes :
La première étape consiste à initialiser certaines variables d'environnement, qui prendront effet tout au long du cycle de vie de SAPI ;
La deuxième étape consiste à générer des paramètres de variables spécifiques uniquement à la requête en cours.
est la première étape lors du démarrage de PHP
? Quelles sont la première et la deuxième étapes ? Ne vous inquiétez pas, nous en discuterons en détail ensuite. Examinons d'abord la première et la plus importante étape. Ce qu’il faut retenir, c’est que la première étape de l’opération se déroule avant l’arrivée des requêtes.
Après avoir démarré Apache, l'interpréteur PHP démarre également ;
PHP appelle la méthode MINIT de chaque extension, faisant ainsi passer ces extensions dans un état disponible. Jetez un œil aux extensions ouvertes dans le fichier php.ini ; MINIT signifie "initialisation du module". Chaque module définit un ensemble de fonctions, de bibliothèques de classes, etc. pour gérer d'autres requêtes.
Une méthode MINIT typique est la suivante :
PHP_MINIT_FUNCTION(extension_name){
/* Initialiser les fonctions, classes, etc. */
}
PHP démarre la deuxième étape
Lorsqu'une requête de page se produit, la couche SAPI cède le contrôle à la couche PHP. PHP définit donc les variables d'environnement nécessaires pour répondre à cette requête. Dans le même temps, il crée également une table de variables pour stocker les noms de variables et les valeurs générées lors de l'exécution.
PHP appelle la méthode RINIT de chaque module, qui est la « requête d'initialisation ». Un exemple classique est le RINIT du module Session. Si le module Session est activé dans php.ini, la variable $_SESSION sera initialisée et le contenu pertinent sera lu lorsque le RINIT du module sera appelé
; être considéré comme un Le processus de préparation démarre automatiquement entre les exécutions du programme.
Une méthode RINIT typique est la suivante :
PHP_RINIT_FUNCTION(extension_name) {
/* Initialiser les variables de session, pré-remplir les variables, redéfinir les variables globales, etc. */
}
La première étape de l'arrêt de PHP
est la même que celle du démarrage de PHP. L'arrêt de PHP est également divisé en deux étapes :
Une fois la page exécutée (qu'elle atteigne la fin du fichier ou qu'elle soit terminée avec la fonction exit ou die), PHP démarrera. le processus de nettoyage. Il appellera la méthode RSHUTDOWN de chaque module dans l'ordre.
RSHUTDOWN permet d'effacer la table des symboles générée lors de l'exécution du programme, c'est-à-dire d'appeler la fonction unset sur chaque variable.
Une méthode RSHUTDOWN typique est la suivante :
PHP_RSHUTDOWN_FUNCTION(extension_name) {
/* Gérer la mémoire, supprimer toutes les variables utilisées lors du dernier appel PHP, etc. */
}
la deuxième étape d'arrêt de PHP
, toutes les requêtes ont été traitées et SAPI est prêt à être arrêté. PHP commence à exécuter la deuxième étape :
PHP appelle la méthode MSHUTDOWN de chaque extension. C'est la dernière opportunité pour chaque module. pour libérer de la mémoire.
Une méthode RSHUTDOWN typique est la suivante :
PHP_MSHUTDOWN_FUNCTION(extension_name) {
/* Gestionnaires gratuits et mémoire persistante, etc. */
}
De cette façon, tout le cycle de vie de PHP est terminé. A noter que « démarrer la première étape » et « fermer la deuxième étape » ne seront exécutés que lorsqu'il n'y a pas de requête du serveur.