Pour comprendre le processus d'analyse de php, vous devez d'abord comprendre les concepts associés de cgi, fastcgi et php-fpm.
Qu'est-ce que cgi ?
cgi (Common Gateway Interface) est en fait un protocole. Le programme qui implémente le protocole cgi peut être appelé programme CGI. Il peut interagir avec le navigateur et peut également interagir avec l'API de base de données Communicate. avec des sources de données externes telles que des serveurs de bases de données et obtenir des données à partir des serveurs de bases de données. Après formatage en document HTML, celui-ci est envoyé au navigateur ou les données obtenues à partir du navigateur peuvent être placées dans la base de données. Et php-cgi est un protocole utilisé pour analyser le code PHP. Mais cet accord présente plusieurs inconvénients.
Tout d'abord, chaque fois que le client demande un fichier de script PHP, le serveur créera un processus et appellera l'analyseur pour analyser le script. Lorsque le script est exécuté, le processus sera tué, et chaque processus de fork. passera par php.ini pour initialiser l'environnement. Le processus ne peut pas être réutilisé et la surcharge d'E/S de php.ini est augmentée. Limite la vitesse d'exécution de PHP. Ainsi, le smart phper a mis au point un meilleur protocole cgi, qui était le protocole fastcgi qui est sorti plus tard.
protocole fastcgi
Gu Ming pensait, protocole cgi plus rapide. Alors, où est-il bientôt ?
Tout d'abord, fastcg résout les problèmes du php-cgi d'origine. Il permet de traiter plusieurs requêtes en un seul processus, au lieu de terminer directement le processus après le traitement d'une requête. le serveur Web s'améliore. En fait, Fastcgi démarrera d'abord un maître, analysera le fichier de configuration, initialisera l'environnement d'exécution, puis démarrera plusieurs travailleurs.
Lorsqu'une demande arrive, le maître la transmettra à un travailleur, puis la demande suivante pourra être acceptée immédiatement. Cela évite la duplication du travail et est naturellement très efficace. Et lorsqu'il n'y a pas assez de Workers, le maître peut pré-démarrer plusieurs Workers selon la configuration et attendre. Bien sûr, lorsqu'il y a trop de Workers inactifs, certains seront arrêtés, ce qui améliore les performances et économise les ressources.
php-fpm
PHP-FPM (FastCGI Process Manager : FastCGI Process Manager) est un gestionnaire PHPFastCGI pour php avant PHP 5.3.3, est un package de correctifs conçu pour intégrer la gestion des processus FastCGI dans les packages PHP.
Si vous utilisez PHP avant PHP5.3.3, vous devez le patcher dans votre code source PHP, et vous pourrez l'utiliser après avoir compilé et installé PHP. En fait, on peut considérer php-fpm comme un interpréteur. Nous pouvons utiliser la commande : ps -aux | grep php-fpm pour afficher l'état du processus correspondant, comme indiqué ci-dessous :
L'utilisation de php-fpm peut redémarrer en douceur, modifications générales Après php.ini, le processus php-cgi ne peut pas être redémarré en douceur, ce qui signifie que vous devez redémarrer le service pour recharger la nouvelle configuration. Le mécanisme de traitement php-fpm pour cela est que les nouveaux travailleurs utilisent de nouvelles configurations et que les travailleurs existants peuvent se reposer après avoir traité le travail en cours. Ce mécanisme est utilisé pour faciliter la transition.
Processus d'analyse du code PHP :
1. Scanning (Lexing), convertir le code PHP en fragments de langage (Tokens).
2. Analyse, conversion des jetons en expressions simples et significatives.
3. Compilation, compilez les expressions dans Opocdes.
4. Exécution, exécutez les Opcodes séquentiellement, un à la fois, réalisant ainsi la fonction du script PHP.
De nos jours, certains Cache, comme APC, peuvent permettre à PHP de mettre en cache les Opcodes. De cette façon, chaque fois qu'une requête arrive, il n'est pas nécessaire de répéter les trois premières étapes, ce qui peut grandement améliorer. l'exécution de PHP.
Tutoriel recommandé : Tutoriel vidéo PHP
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!