
PHP内核
WJHCoding
phper
展开
-
PHP内核之SAPI:Apache2 SAPI分析
1、首先概念普及:SAPI: Server abstraction API,它提供了一个接口,使得PHP可以和其他应用进行交互数据,具体点说是提供了一个和外部通信的接口。常见的:给apache的mod_php5,CGI,给IIS的ISAPI,还有Shell的CLI首先我们看个从鸟哥那挪来的PHP架构图:如果还感觉概念模糊的话 可以试着用wamp升级php版本来找下感觉首先说原创 2016-08-28 12:24:52 · 1864 阅读 · 0 评论 -
PHP内核之Apache的PHP模块启动
首先,了解一下每个Apache模块都会输出一个模块数据结构,其定义结构如下(以PHP模块为例):AP_MODULE_DECLARE_DATA module php5_module = { STANDARD20_MODULE_STUFF, create_php_config, /* create per-directory config structure */ merge_php_原创 2016-08-28 21:29:38 · 534 阅读 · 0 评论 -
PHP内核之PHP.INI配置原理
使用php的同学都知道php.ini配置的生效会贯穿整个SAPI的生命周期。在一段php脚本的执行过程中,如果手动修改ini配置,是不会启作用的。此时如果无法重启apache或者nginx等,那么就只能显式的在php代码中调用ini_set接口。ini_set是php向我们提供的一个动态修改配置的函数,需要注意的是,利用ini_set所设置的配置与ini文件中设置的配置,其生效的时间范围并不相同。转载 2016-09-03 20:38:02 · 294 阅读 · 0 评论 -
PHP内核之动态修改PHP.INI
运行时改变配置在前一篇中曾经谈到,ini_set函数可以在php执行的过程中,动态修改php的部分配置。注意,仅仅是部分,并非所有的配置都可以动态修改。关于ini配置的可修改性,参见:http://php.net/manual/zh/configuration.changes.modes.php我们直接进入ini_set的实现,函数虽然有点长,但是逻辑很清晰:/* {{{转载 2016-09-03 21:08:56 · 310 阅读 · 0 评论 -
PHP内核之PHP解释器引擎执行流程
这里将介绍引擎内部执行一个PHP脚本的流程,以cli SAPI为例子来对流程中核心的部分做简单介绍,省去一些初始化及清理操作。 cli(Command Line Interface)即PHP的命令行模式,现在此SAPI是默认安装的,我们在服务器上安装完PHP之后,一般会生成一个可执行文件,假设此文件为/usr/local/bin/php ,那么我们在SHELL下可以用以下命令来执行一转载 2016-09-04 12:53:51 · 397 阅读 · 0 评论 -
PHP内核之opcode 变量哪里去了
首先我们需要知道一个东东:操作数,每个操作数有一下两部分组成IS_TMP_VAR: 一个临时变量,保存一些op_array的结果,以便接下来的op_array使用,这种的操作数的 u 保存着一个指向变量表的一个句柄(整数),这种操作数一般用 "~" 开头,比如~0, 表示变量表的0号未知的临时变量IS_VAR 这种是我们一般意义上的变量了,以$开头表示原创 2016-08-26 10:03:22 · 557 阅读 · 0 评论 -
PHP内核之opcode解读
我们通过示例来说吧<?phpecho '1'.print(2)+3;exit;?>得出的opcode如图:行号、指令编号、脚本开始标记、结束标记、ZEND VM指令、返回值、ZEND VM指令对应的参数。原创 2016-08-26 13:33:49 · 749 阅读 · 0 评论 -
PHP内核之opcode的处理函数查找
首先我们需要知道有个存放 所有opcode 的 opcode_handler_t 的函数指针字段 的集合 的文件 php-5.5.12\Zend\zend_vm_execute.hvoid zend_init_opcodes_handlers(void){ /* opcode执行函数的指针字段集合 */ static const opcode_handler_t labels[] =原创 2016-08-27 00:01:03 · 1072 阅读 · 0 评论