PHP自定义扩展之生命周期的示例分析
导读:本文共2000.5字符,通常情况下阅读需要7分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: php_request_startup这个阶段和php_module_startup差不多,都是初始化工作,比php_module_startup简单很多,可以自己看下,重点来看下执行阶段php_execute_script用gdb看看调用栈,gdb... ...
目录
(为您整理了一些要点),点击可以直达。
php_request_startup
这个阶段和php_module_startup
差不多,都是初始化工作,比php_module_startup
简单很多,可以自己看下,重点来看下执行阶段
php_execute_script
用gdb看看调用栈,gdb ./php
在php_execute_script
打断点,执行,在看下调用栈,
在调用栈可以清楚看到执行流程,现在到/cli/php_cli.c文件看看做了哪些事情,
初始化变量,解析命令到/main/main.c文件看看真正的执行阶段
加载要执行的php文件,通过zend_compile_file
进行词法分析 语法分析,生成AST
,编译成op_array
,也就是指令集,
我们看下指令集,
然后放到zend虚拟机上执行zend_execute(op_array, retval);
这这里可以看到真正执行的是这个zend_execute_ex(execute_data);
,它是一个函数指针,我们可以更换它,知道这个,那么我们在写扩展时可以重新写个zend_execute_ex
函数替换php
默认的,我们自己的就可以做很多事情,像拦截php函数,做性能监控。
请求关闭阶段php_request_shutdown
,模块关闭阶段php_module_shutdown
这两个阶段主要是做变量销毁,现在我们知道了一个自定义扩展在生命周期里的怎么执行的。
PHP自定义扩展之生命周期的示例分析的详细内容,希望对您有所帮助,信息来源于网络。