PHP内核探索之解释器的执行过程
cli(Command Line Interface)即PHP的命令行模式,现在此SAPI是默认安装的,我们在服务器上安装完PHP之后,一般会生成一个可执行文件,假设此文件为/usr/local/bin/php ,那么我们在SHELL下可以用以下命令来执行一个PHP脚本:
/usr/local/bin/php -f test.php
以CLI SAPI为例来对php执行核心部分进行解析。CLI是php命令行模式,此SAPI是默认安装的,在服务器端安装过PHP后,生成以一个可执行文件,可以在shell中调用PHP命令来执行。
PHP -f XX.php
执行流程:
解析命令行参数;
初始化环境;
编译执行PHP代码;
清理环境,退出;
在第3个阶段中,如何执行PHP脚本的:
通过调用php_execute_script( handle_file )来完成第三阶段,该函数最终会调用zend_execute_scipts( … ) ,这个函数是一个可变参函数,可以一次执行多个PHP脚本。
在zend_execut_scripts(…..)函数中核心调用了(zend_pile_file)( pile_file ), (*zend_execute)( zend_op_array )这两个函数;
通过调用zend_pile_file编译参数指定的php脚本文件,该函数会返回一个zend_op_array的结构指针;
zend_execute传入的参数是zend_pile_file的返回值,就开始执行opcode了。
这两个函数是Zend API,是一个函数指针,在引擎初始化的时候回赋值具体的方法。
ps.:那为什么这两个Zend API是函数指针呢?
在引擎初始化的时候,zend_execute和zend_pile_file会在引擎初始化的时候指向默认的方法。我们可以在编译和执行重写函数的指向,这样就为我们扩展引擎时留下了钩子。例如:vld将zend_execute和zend_pile_file指向自己对原始函数封装后的函数,添加了opcode信息的输出。
编程语言
- 机械手焊接机器人编程 机械手焊接设备编程
- vb数据库编程实例,vb做数据库
- tiobe世界编程语言排行榜,全球编程语言排行
- 成都java编程培训 成都it编程培训中心
- 编程基础培训,编程基础知识培训
- flash游戏编程基础教程,flash游戏开发教程
- 不会英语能学编程吗 不会英语可以学程序员吗
- 爱心代码编程C语言 爱心代码编程c语言公式
- c语言编程学习入门 c语言编程快速入门
- 西门子plc编程培训 西门子plc编程培训班
- 哪里可以学编程 台州哪里可以学编程
- 少儿编程哪个好 少儿编程哪个品牌好
- 编程是什么意思,图形编程是什么意思
- c语言编程软件下载,c语言编程软件在哪下载
- java编程软件下载,java编程下载手机版
- ug编程培训学校,ug编程培训教程