PHP内核探索之解释器的执行过程


Posted in PHP onDecember 22, 2015

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_compile_file)( compile_file ), (*zend_execute)( zend_op_array )这两个函数;

通过调用zend_compile_file编译参数指定的php脚本文件,该函数会返回一个zend_op_array的结构指针;

zend_execute传入的参数是zend_compile_file的返回值,就开始执行opcode了。

这两个函数是Zend API,是一个函数指针,在引擎初始化的时候回赋值具体的方法。

ps.:那为什么这两个Zend API是函数指针呢?

在引擎初始化的时候,zend_execute和zend_compile_file会在引擎初始化的时候指向默认的方法。我们可以在编译和执行重写函数的指向,这样就为我们扩展引擎时留下了钩子。例如:vld将zend_execute和zend_compile_file指向自己对原始函数封装后的函数,添加了opcode信息的输出。

PHP 相关文章推荐
用PHP读取flv文件的播放时间长度
Sep 03 PHP
简单PHP上传图片、删除图片实现代码
May 12 PHP
PHP中extract()函数的妙用分析
Jul 11 PHP
使用php批量删除数据库下所有前缀为prefix_的表
Jun 09 PHP
PHP实现显示照片exif信息的方法
Jul 11 PHP
浅谈thinkphp的实例化模型
Jan 04 PHP
php计算一个文件大小的方法
Mar 30 PHP
PHP+Ajax实现无刷新分页实例详解(附demo源码下载)
Apr 07 PHP
PHP分页初探 一个最简单的PHP分页代码的简单实现
Jun 21 PHP
thinkphp5.0自定义验证规则使用方法
Nov 16 PHP
php+croppic.js实现剪切上传图片功能
Aug 14 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
Mar 23 PHP
PHP内核探索之变量
Dec 22 #PHP
yii2.0使用Plupload实现带缩放功能的多图上传
Dec 22 #PHP
PHP输入流php://input实例讲解
Dec 22 #PHP
服务器迁移php版本不同可能诱发的问题
Dec 22 #PHP
php上传图片并压缩的实现方法
Dec 22 #PHP
PHP实现图片上传并压缩
Dec 22 #PHP
Linux系统中设置多版本PHP共存配合Nginx服务器使用
Dec 21 #PHP
You might like
用PHP和ACCESS写聊天室(二)
2006/10/09 PHP
中国站长站 For Dede4.0 采集规则
2007/05/27 PHP
使Ext的Template可以解析二层的json数据的方法
2007/12/22 Javascript
JavaScript中Math对象使用说明
2008/01/16 Javascript
window.onresize 多次触发的解决方法
2013/11/08 Javascript
从js向Action传中文参数出现乱码问题的解决方法
2013/12/29 Javascript
javascript实现des解密加密全过程
2014/04/03 Javascript
wap图片滚动特效无css3元素纯js脚本编写
2014/08/22 Javascript
jQuery选择器及jquery案例详解(必看)
2016/05/20 Javascript
JS动态添加选项案例分析
2016/10/17 Javascript
Angularjs使用ng-repeat中$even和$odd属性的注意事项
2016/12/31 Javascript
js上传图片预览的实现方法
2017/05/09 Javascript
详解Vue学习笔记进阶篇之列表过渡及其他
2017/07/17 Javascript
vue的mixins属性详解
2018/03/14 Javascript
微信小程序获取用户openid的实现
2018/12/24 Javascript
react的滑动图片验证码组件的示例代码
2019/02/27 Javascript
react 组件传值的三种方法
2019/06/03 Javascript
python实现线程池的方法
2015/06/30 Python
python如何实现excel数据添加到mongodb
2015/07/30 Python
Python实现个人微信号自动监控告警的示例
2019/07/03 Python
用Python批量把文件复制到另一个文件夹的实现方法
2019/08/16 Python
python脚本之一键移动自定格式文件方法实例
2019/09/02 Python
Python可以实现栈的结构吗
2020/05/27 Python
全面解析CSS Media媒体查询使用操作(推荐)
2017/08/15 HTML / CSS
使用CSS实现阅读进度条
2017/02/27 HTML / CSS
GEOX鞋美国官方网站:意大利会呼吸的鞋
2017/07/12 全球购物
Topman美国官网:英国著名的国际平价时尚男装品牌
2017/12/22 全球购物
瑞典快乐袜子:Happy Socks
2018/02/16 全球购物
美国韩国化妆品和护肤品购物网站:Beautytap
2018/07/29 全球购物
Brasty波兰:香水、化妆品、手表网上商店
2019/04/15 全球购物
JavaScript实现页面动态验证码的实现示例
2021/03/23 Javascript
师范大学音乐表演专业求职信
2013/10/23 职场文书
实习评语大全
2014/04/26 职场文书
高中学生会竞选演讲稿
2014/08/25 职场文书
暑期学习心得体会
2014/09/02 职场文书
开业庆典嘉宾致辞
2015/08/01 职场文书