• 技术文章 >php教程 >php手册

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

    2016-06-13 08:49:07原创538

    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_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信息的输出。

    您可能感兴趣的文章:

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:php 内核 探索 解释器
    上一篇:PHP面向对象编程之深入理解方法重载与方法覆盖(多态), 下一篇:WordPress中转义HTML与过滤链接的相关PHP函数使用解析,
    PHP编程就业班

    相关文章推荐

    • SSI使用详解(二)• PHP应用程序架构浅谈• 基于php-fpm 参数的深入理解• PHP源码之explode使用说明• php.ini 中文版

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网