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 5.0对象模型深度探索之绑定
Sep 05 PHP
PHP下几种删除目录的方法总结
Aug 19 PHP
ThinkPHP的截取字符串函数无法显示省略号的解决方法
Jun 25 PHP
PHP实现对png图像进行缩放的方法(支持透明背景)
Jul 15 PHP
如何把php5.3版本升级到php5.4或者php5.5
Jul 31 PHP
PHP爬虫之百万级别知乎用户数据爬取与分析
Jan 22 PHP
PHP 等比例缩放图片详解及实例代码
Sep 18 PHP
详解PHP处理字符串类似indexof的方法函数
Jun 11 PHP
Laravel中Facade的加载过程与原理详解
Sep 22 PHP
详解cookie验证的php应用的一种SSO解决办法
Oct 20 PHP
thinkPHP框架实现多表查询的方法
Jun 14 PHP
php对微信支付回调处理的方法
Aug 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函数常用用法小结
2010/02/08 PHP
php中判断数组是一维,二维,还是多维的解决方法
2013/05/04 PHP
php根据日期或时间戳获取星座信息和生肖等信息
2015/10/20 PHP
Yii2增删改查之查询 where参数详细介绍
2016/08/08 PHP
详解Yaf框架PHPUnit集成测试方法
2017/12/27 PHP
Yii2.0框架模型多表关联查询示例
2019/07/18 PHP
Prototype源码浅析 String部分(三)之HTML字符串处理
2012/01/15 Javascript
常规表格多表头查询示例
2014/02/21 Javascript
node.js开发中使用Node Supervisor实现监测文件修改并自动重启应用
2014/11/04 Javascript
JavaScript 正则表达式中global模式的特性
2016/02/25 Javascript
JavaScript基于原型链的继承
2016/06/22 Javascript
总结AngularJS开发者最常犯的十个错误
2016/08/31 Javascript
BootStrap 下拉菜单点击之后不会出现下拉菜单(下拉菜单不弹出)的解决方案
2016/12/14 Javascript
js实现自定义进度条效果
2017/03/15 Javascript
HTML5+Canvas调用手机拍照功能实现图片上传(上)
2017/04/21 Javascript
JQuery实现图片轮播效果
2017/05/08 jQuery
基于 flexible 的 Vue 组件:Toast -- 显示框效果
2017/12/26 Javascript
JS 中可以提升幸福度的小技巧(可以识别更多另类写法)
2018/07/28 Javascript
NodeJS实现同步的方法
2019/03/02 NodeJs
Vue使用mixin分发组件的可复用功能
2019/09/01 Javascript
怎么理解wx.navigateTo的events参数使用详情
2020/05/18 Javascript
Vue如何实现监听组件原生事件
2020/07/03 Javascript
JS实现无限轮播无倒退效果
2020/09/21 Javascript
Python中安装easy_install的方法
2018/11/18 Python
浅谈python opencv对图像颜色通道进行加减操作溢出
2020/06/03 Python
全面介绍python中很常用的单元测试框架unitest
2020/12/14 Python
英国知名衬衫品牌美国网站:Charles Tyrwhitt美国
2016/08/28 全球购物
葡萄牙鞋子品牌:Fair
2016/12/10 全球购物
Nasty Gal英国:美国女性服饰销售网站
2021/03/02 全球购物
心理健康教育制度
2014/01/27 职场文书
《李广射虎》教学反思
2014/04/27 职场文书
解除财产保全担保书
2014/05/20 职场文书
领导班子群众路线与四风问题对照检查材料思想汇报
2014/10/11 职场文书
先进典型发言材料
2014/12/30 职场文书
幼儿园亲子活动通知
2015/04/24 职场文书
Jpa Specification如何实现and和or同时使用查询
2021/11/23 Java/Android