码迷,mamicode.com
首页 > Windows程序 > 详细

PHP内核:SAPI探秘

时间:2015-05-02 09:35:35      阅读:232      评论:0      收藏:0      [点我收藏+]

标签:

首先来张PHP的架构图

技术分享

什么SAPI?

SAPI的中文译作:服务器端应用编程接口。它负责PHP与其他应用交互数据。这里的其他应用可能是shell或者apache等等。常见的SAPI有:

CGI,Fast-cgi,CLI(for shell),isapi(for IIS),Embed(for c/c++)等等。

举例:当在Shell下(window下的command line)输入:php index.php 此时,由CLI这个SAPI负责将用户的请求处理。要定义一个SAPI,需要定义一个结构体。

CLI的SAPI结构如下:(/path/to/php-src/sapi/cli/php_cli.c)

技术分享

结构体sapi_module_struct定义了当一个cli sapi启动所做的一些操作,下面我们来看看。

1:“cli"定义了当前sapi的名称,phpinfo函数将使用这个名称。

2:php_cli_startup,该函数的完整定义为

技术分享

可以看到该函数将调用php_module_startup.这是一个PHP初始化函数(这部分参见:http://www.walu.cc/phpbook/1.3.md php生命周期)

3:php_module_shutdown_wrapper,函数的定义是:

技术分享

只是简单的对php_module_shutdown()做了简单的包装

4:PHP对每个request做一些初始化,资源分配的事务,在这里对cli并没有相应的handler。但对于mod_php就不同了。他要在apache的pool中注册资源析构函数,申请空间,初始化环境变量等等。

5:sapi_cli_deactivate,收尾的工作。

技术分享

6:sapi_cli_ub_write,提供给Zend刷新缓存的函数句柄,

技术分享

技术分享

sapi_cli_single_write函数将数据写入stdout中

7:sapi_cli_flush

技术分享

该函数调用了系统的fflush进行缓存区的刷新。

8:这部分能让Zend验证一个要执行的脚本文件state,判断权限。

(未完成)

PHP内核:SAPI探秘

标签:

原文地址:http://www.cnblogs.com/xxlv/p/4471547.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!