Maison >développement back-end >Problème PHP >Qu'est-ce que php est utilisé pour analyser ?

Qu'est-ce que php est utilisé pour analyser ?

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼original
2019-09-28 14:32:443018parcourir

Qu'est-ce que php est utilisé pour analyser ?

PHP est un langage de script serveur et un langage interprété. Il est largement utilisé dans la construction de sites Web de petite et moyenne taille. Il n'est pas aussi lourd que Java et est plus rapide à développer. Mais comment ce langage de script est-il analysé par le serveur ?

Nous savons tous que PHP peut être embarqué dans du HTML, mais le suffixe du fichier doit se terminer par .php. S'il s'agit de .html, l'extrait de code PHP sera directement commenté par le navigateur. Fini la démonstration, regardons un exemple ci-dessous :

#test1.php
<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>test</title>
</head>
<body>
  <?php   
    echo "我是一段PHP脚本";
  ?>
</body>
</html>

Le résultat lors de l'accès via le navigateur après avoir utilisé PHPstudy :

Quest-ce que php est utilisé pour analyser ?

Il s'agit d'un paragraphe Code très simple. On voit que le serveur transmet directement le résultat analysé au navigateur. En fait, lorsque le serveur découvre que le suffixe de ressource demandé est .php, il appellera l'analyseur PHP pour l'analyser et exécuter le. Code PHP à l'intérieur. Répondez ensuite la ressource au client. Alors voici le point : comment le code PHP est-il analysé ? Tout d'abord, nous devons d'abord comprendre les concepts associés de cgi, fastcgi et php-fpm.

Recommandations associées : "Tutoriel d'introduction à PHP"

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. Les applications peuvent interagir avec le navigateur et également utiliser l'API de base de données pour communiquer avec des utilisateurs externes. sources de données telles que les serveurs de base de données et obtenir des données à partir des serveurs de base 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 fork un processus et appelle l'analyseur pour analyser le script. Lorsque le script est exécuté, le processus sera tué et chaque processus 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 transmet à un travailleur, qui peut alors immédiatement accepter la demande suivante. 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 5.3.3. Pour PHP, il est un package de correctifs conçu pour intégrer la gestion des processus FastCGI dans le package 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 :

Quest-ce que php est utilisé pour analyser ?

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.

但是传统的php-fpm的worker是同步阻塞的,这在一定程度下也限制了程序的运行速度,并且普通的PHP是无法常驻内存的,也就意味着我们每次执行代码都需要将相同的东西重新加载到新内存去,这点跟java的servlet就不同了,java的servlet在用户访问后实例化,下一个用户就不会再次进行实例化。为了解决这些问题,强大的Rango写出了swoole拓展,swoole和fpmd的进程模型是相同的,manager都是负责管理子进程的创建和回收。但php-fpm的worker进程是同步阻塞的,swoole的worker进程是异步非阻塞的。并且swoole的http-server和fpm的差异是http-server是内存常驻的,PHP程序变成长生命周期的了。变量和对象在使用请求结束后并不会销毁,可以复用。这也就是为什么我们说swoole开启了PHP的新世界。

 我们可以用简单的几句就可以创建一个异步非阻塞的http-server甚至是http2协议的server。例如:

$http = new swoole_http_server("127.0.0.1", 9501);
$http->on(&#39;request&#39;, function ($request, $response) {
    $response->end("<h1>Hello Swoole. #".rand(1000, 9999)."</h1>");
});
$http->start();

swoole的高性能体现在它是一个纯c编写的拓展,并且使用了全内存缓存和异步IO。使得它相对于Node.js默认是单线程的无法利用全部CPU,Golang的协程调度本身有一定性能消耗相比,有着更加不错的性能。

用图解析一波,php-fpm是这样的(图片来源于网络):

Quest-ce que php est utilisé pour analyser ?

而swoole的http-server是这样的(这里的cache应该理解成框架初始化环境所使用的内存):

Quest-ce que php est utilisé pour analyser ?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn