1. 首页 > 产业新闻 > 激光

多学习才能多赚钱之:php是如何经过解析的

要了解php的解析过程首先要了解cgi,fastcgi,php-fpm的相关概念。

cgi是什么?

cgi(通用网关接口)实际上是一种协议,实现cgi协议的程序我们可以称之为cgi程序,CGI应用程序能与浏览器进行交互,还可通过数据库API与数据库服务器等外部数据源进行通信,从数据库服务器中获取数据。格式化为HTML文档后,发送给浏览器,也可以将从浏览器获得的数据放到数据库中。而php-cgi就是用来解析PHP代码的一种协议。但是这种协议有几个弊端。

首先,每当客户端请求一个PHP脚本文件时,服务器就会fork一个进程调用解析器来对该脚本进行解析,当这个脚本执行完毕后该进程就会被kill掉,并且每次fork的进程都会过一遍php.ini来初始化环境。进程无法复用,并且增加了对php.ini的io开销。限制了PHP的执行速度。于是聪明的phper想出了更好的cgi协议,也就是后来出的fastcgi协议。

fastcgi协议

顾明思议,更快的cgi协议。那么他快在哪里呢?

首先fastcg解决了原有的php-cgi的毛病,它允许在一个进程内处理多个请求,而不是一个请求处理完毕就直接结束进程,web服务器性能上有了很大的提高。实际上Fastcgi会先启一个master,解析配置文件,初始化执行环境,然后再启动多个worker。

当请求过来时,master会传递给一个worker,然后立即可以接受下一个请求。这样就避免了重复的劳动,效率自然是高。而且当worker不够用时,master可以根据配置预先启动几个worker等着;当然空闲worker太多时,也会停掉一些,这样就提高了性能,也节约了资源。

php-fpm

PHP-FPM(FastCGIProcessManager:FastCGI进程管理器)是一个PHPFastCGI管理器,对于PHP5.3.3之前的php来说,是一个补丁包,旨在将FastCGI进程管理整合进PHP包中。

如果你使用的是PHP5.3.3之前的PHP的话,就必须将它patch到你的PHP源代码中,在编译安装PHP后才可以使用。实际上我们可以把php-fpm看成一个解释器。我们可以使用命令:ps-aux|grepphp-fpm来查看对应的进程状态,如下图:

使用php-fpm是可以平滑重启的,一般修改php.ini之后,php-cgi进程是没办法平滑重启的,也就是说你必须重启服务才能重新加载新的配置。而php-fpm对此的处理机制是新的worker用新的配置,已经存在的worker处理完手上的活就可以歇着了,通过这种机制来平滑过度。

PHP代码解析过程:

1、Scanning(Lexing),将PHP代码转换为语言片段(Tokens)。

2、Parsing,将Tokens转换成简单而有意义的表达式。

3、Compilation,将表达式编译成Opocdes。

4、Execution,顺次执行Opcodes,每次一条,从而实现PHP脚本的功能。

现在有的Cache比如APC,可以使得PHP缓存住Opcodes,这样,每次有请求来临的时候,就不需要重复执行前面3步,从而能大幅的提高PHP的执行速度。

以上就是php是如何经过解析的的详细内容,更多请关注其它相关文章!

版权声明:本文转载于今日头条,版权归作者所有,如果侵权,请联系本站编辑删除

本文采摘于网络,不代表本站立场,转载联系作者并注明出处:https://www.iotsj.com//chanye/jiguang/3579.html

联系我们

在线咨询:点击这里给我发消息

微信号:666666