柒资源

PHP底层之三:PHP运行机制

  • 时间:2018-04-01 20:29 编辑:张少平 来源:柒资源 阅读:428
  • 扫一扫,手机访问
摘要:PHP的执行流程为:Scanning(lexing),将PHP代码转换为语言片段(tokens)--parsing,将Tokens转换为简单而有意义的表达式--Compilation将表达式编译成Opcode--Execution,顺次执行Opcodes,从而实现PHP脚本的功能。

PHP的执行流程为:Scanning(lexing),将PHP代码转换为语言片段(tokens)--parsing,将Tokens转换为简单而有意义的表达式--Compilation将表达式编译成Opcode--Execution,顺次执行Opcodes,从而实现PHP脚本的功能。(PHP实现了一个典型的动态语言执行过程:拿到一段代码后,经过词法解析、语法解析等阶段后,源程序会被翻译成一个个指令(opcodes),然后ZEND虚拟机顺次执行这些指令完成操作。PHP本身是用C实现的,因此最终调用的也都是C的函数,实际上,我们可以把PHP看做是一个C开发的软件。)

PHP的执行的核心是翻译出来的一条一条指令,也即opcode。

Opcode是PHP程序执行的最基本单位。一个opcode由两个参数(op1,op2)、返回值和处理函数组成。PHP程序最终被翻译为一组opcode处理函数的顺序执行。


PHP采用多进程模式,不同请求间互不干涉,这样保证了一个请求挂掉不会对全盘服务造成影响,当然,随着时代发展,PHP也早已支持多线程模型。

关于PHP 进程? 线程的解释? 请参考:PHP的进程和线程

PHP的四层体系包括:ZEND引擎,EXTENSIONS,SAPI,上层应用;ZEND引擎+EXTENSIONS的组件模式降低内部耦合。
从图上可以看出,PHP从下到上是一个4层体系:
Zend引擎:Zend整体用纯C实现,是PHP的内核部分,它将PHP代码翻译(词法、语法解析等一系列编译过程)为可执行opcode的处理并实现相应的处理方法、实现了基本的数据结构(如hashtable、oo)、内存分配及管理、提供了相应的api方法供外部调用,是一切的核心,所有的外围功能均围绕Zend实现。
Extensions:围绕着Zend引擎,extensions通过组件式的方式提供各种基础服务,我们常见的各种内置函数(如array系列)、标准库等都是通过extension来实现,用户也可以根据需要实现自己的extension以达到功能扩展、性能优化等目的(如贴吧正在使用的PHP中间层、富文本解析就是extension的典型应用)。
Sapi:Sapi全称是Server Application Programming Interface,也就是服务端应用编程接口,Sapi通过一系列钩子函数,使得PHP可以和外围交互数据,这是PHP非常优雅和成功的一个设计,通过sapi成功的将PHP本身和上层应用解耦隔离,PHP可以不再考虑如何针对不同应用进行兼容,而应用本身也可以针对自己的特点实现不同的处理方式。
上层应用:这就是我们平时编写的PHP程序,通过不同的sapi方式得到各种各样的应用模式,如通过webserver实现web应用、在命令行下以脚本方式运行等等。
关于Sapi:如前所述,Sapi通过通过一系列的接口,使得外部应用可以和PHP交换数据并可以根据不同应用特点实现特定的处理方法,我们常见的一些sapi有:
apache2handler:这是以apache作为webserver,采用mod_PHP模式运行时候的处理方式,也是现在应用最广泛的一种。
cgi:这是webserver和PHP直接的另一种交互方式,也就是大名鼎鼎的fastcgi协议,在最近今年fastcgi+PHP得到越来越多的应用,也是异步webserver所唯一支持的方式。
cli:命令行调用的应用模式



关于CGI请前去阅读本站分享的另外一篇文章:CGI,FastCGI,PHP-CGI,PHP-FPM之间的关系

  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【技术干货|】火车头采集器7.6破解版出现闪退的解决办法(2018-04-11 13:19)
【技术干货|】PHP中常见的知识点不得不知道的技术点(2018-04-04 16:55)
【技术干货|】PHP工作中案例的总结-简述版(2018-04-04 16:32)
【技术干货|】PHP面试总结(2018-04-04 15:16)
【技术干货|】浅谈MySQL中优化sql语句查询常用的30种方法(2018-04-04 14:29)
【新闻资讯|】强制索权!中国电信这款APP不仅索要70多项权限,还要修改你的通讯录(2018-04-02 19:06)
【技术干货|】什么是死锁和如何解决死锁(2018-04-02 19:00)
【技术干货|】PHP 图片自动过滤和检测(2018-04-02 15:51)
【技术干货|】PHP主流技术之:PHP7的新特性(2018-04-02 10:16)
【技术干货|】关于HTTP协议(2018-04-02 09:59)
网站首页??|?? 关于我们??|?? 广告合作??|?? 联系我们??|?? 隐私条款??|?? 免责声明
CopyRight 2014-2024 柒资源 | 京ICP备17053914号-2
联系客服
平台客服 平台小二 招商入驻 联系客服
13051431117
手机版

扫一扫进手机版
返回顶部