这里将介绍引擎内部执行一个PHP脚本的流程,以cli SAPI为例子来对流程中核心的部分做简单介绍,省去一些初始化及清理操作。
cli(Command Line Interface)即PHP的命令行模式,现在此SAPI是默认安装的,我们在服务器上安装完PHP之后,一般会生成一个可执行文件,假设此文件为/usr/local/bin/php ,那么我们在SHELL下可以用以下命令来执行一个PHP脚本:
/usr/local/bin/php -f test.php
这个命令将执行当前目录下的test.php脚本,我们暂且不关心test.php具体内容,只关心一下这个执行的内部过程是怎么样的。
cli的主源代码文件在{PHPSRC}/sapi/cli/php_cli.c,整个过程就从这个文件中的 main()函数执行,整个函数比较长,主要可以分为以下几个阶段:
1:解析命令行参数
2:初始化环境
3:编译执行PHP代码
4:清理环境并返回退出
在第1个阶段中,解析-f参数为执行一个PHP文件,-f后面的test.php就是需要被执行的文件
这里我们将关注第3个阶段,如何执行test.php中的PHP代码。
最终是通过php_execute_script(&file_handle TSRMLS_CC)来执行PHP的脚本,这个函数定义在{PHPSRC}/main/main.c,原型为
file_handle的类型为zend_file_ha
PHP命令行执行流程解析

本文详细阐述了PHP命令行模式(CLI)下执行PHP脚本的内部过程,从main()函数开始,涵盖解析命令行参数、初始化环境、编译执行PHP代码到清理环境的各个阶段。重点讲解了如何通过php_execute_script、zend_execute_scripts、zend_compile_file和zend_execute等函数,实现对PHP脚本的编译和执行,同时解释了使用函数指针作为扩展引擎的灵活性。
最低0.47元/天 解锁文章
804

被折叠的 条评论
为什么被折叠?



