美文网首页PHP学习程序员
PHP扩展开发——用户代码的执行

PHP扩展开发——用户代码的执行

作者: AllinGo | 来源:发表于2017-08-07 20:57 被阅读50次

PHP内核的实现与世界上绝大多数的程序一样,接收输入数据, 做相应处理然后输出(返回)结果。 我们编写的代码就是PHP接收的输入数据,PHP内核对我们编写的代码进行解释和运算, 最后返回相应的运算结果。

1、一切的开始: SAPI接口
SAPI(Server Application Programming Interface)指的是PHP具体应用的编程接口, 就像PC一样,无论安装哪些操作系统,只要满足了PC的接口规范都可以在PC上正常运行, PHP脚本要执行有很多种方式,通过Web服务器,或者直接在命令行下,也可以嵌入在其他程序中。

最常见的四种启动PHP方式如下:

  • CLI/CGI模式调用;
  • 多进程模块;
  • 多线程模块;
  • 嵌入式,C程序中调用Zend Engine;

PHP开始执行以后会经过两个主要的阶段:处理请求之前的开始阶段和请求之后的结束阶段。 开始阶段有两个过程:第一个过程是模块初始化阶段(MINIT), 在整个SAPI生命周期内(例如Apache启动以后的整个生命周期内或者命令行程序整个执行过程中), 该过程只进行一次。第二个过程是模块激活阶段(RINIT),该过程发生在请求阶段, 例如通过url请求某个页面,则在每次请求之前都会进行模块激活(RINIT请求开始)。

单进程的SAPI模式流程图如下:


(1)Module init
扩展载入时调用,注册常量或者类初始化

PHP_MINIT_FUNCTION(myext)
{
    return SUCCESS;
}

(2)Request init
请求到达后,PHP会初始化执行脚本的基本环境。

PHP_RINIT_FUNCTION(myext)
{
    return SUCCESS;
}

(3)Request shutdown
请求处理完之后,一般脚本执行到末尾或者通过调用exit()或者die()函数,PHP进入结束阶段。

PHP_RSHUTDOWN_FUNCTION(myext)
{
    return SUCCESS;
}

(4)Module shutdown
SAPI生命周期结束

PHP_MSHUTDOWN_FUNCTION(myext)
{
    return SUCCESS;
}

这两种init和两种shutdown各会执行多少次,取决于上面提到的四种PHP启动方式,比如下面两种:

  • 多进程SAPI生命周期:


  • 多线程SAPI生命周期


2、PHP脚本的执行
PHP在读取到脚本文件后,Zend引擎对脚本文件进行词法分析,语法分析。然后编译成opcode执行。

Opcode缓存就是把虚拟机编译的PHP中间码(Opcode)缓存起来,下一次再次运行同样页面时,直接解释这些代码即可,这样就省去了词法分析、语法编译、语法检查、虚拟机编译一些列过程,一定程度上提高了PHP运行速度,减轻了服务器压力。

参考资料:

  1. 《PHP核心技术与最佳实践》
  2. 《TIPI:深入理解PHP内核》

相关文章

  • PHP扩展开发——用户代码的执行

    PHP内核的实现与世界上绝大多数的程序一样,接收输入数据, 做相应处理然后输出(返回)结果。 我们编写的代码就是P...

  • 如何编写PHP拓展

    为什么要用C扩展 C是静态编译的,执行效率比PHP代码高很多。同样的运算代码,使用C来开发,性能会比PHP要提升数...

  • 深入理解php内核学习笔记之一

    1.今天我们来学习用户代码的执行过程。 php代码的执行过程可以描述为下图 2.php的构成: php的源码有这些...

  • 2019-07-28-php代码审计

    一、PHP代码执行代码审计首先讲一下PHP代码执行漏洞和命令执行漏洞的区别,PHP代码执行指的是将php代码植入到...

  • php扩展数组相关函数

    示例 php代码 扩展代码

  • 编译fileinfo扩展

    进入PHP源码目录 执行PHP扩展编译预处理指令 编译PHP扩展 找到PHP.INI文件,修改extension_...

  • php扩展开发

    扩展入口相关函数 变量定义 php代码 扩展写法 MAKE_STD_ZVAL展开 定义一个数组 php代码 扩展代...

  • PHP-TSRM线程安全管理器-源码分析

    TSRM 介绍 在查看php源代码或开发php扩展的时候,会出现大量 TSRMLS_ 宏字样在函数参数的位置,这些...

  • PECL vs PEAR

    PECL (PHP Extension Community Library) PHP扩展包仓库,方便扩展包开发和下...

  • 如何进行一次简单的性能分析

    基于xhprof开发php性能优化系统全文 安装 安装php msgpack扩展 安装php xhprof扩展 p...

网友评论

    本文标题:PHP扩展开发——用户代码的执行

    本文链接:https://www.haomeiwen.com/subject/cwtzlxtx.html