在PHP生命周期的各个阶段,一些与服务相关的操作都是通过SAPI接口实现。这些内置实现的物理位置在PHP源码的SAPI目录。这个目录存放了PHP对各个服务器抽象层的代码,例如命令行程序的实现,Apache的mod_php模块实现以及fastcgi的实现等等。
SAPI
分别在FPM
和CLI
下是如何运行的?
SAPI
1 | test.php |
FPM
1
2
3
4
5
6
7
8
9static sapi_module_struct cgi_sapi_module = {
"fpm_fcgi",
...
sapi_cgibin_ub_write,
sapi_cgibin_flush,
...
sapi_cgi_read_post,
...
};CLI
1
2
3
4
5
6
7
8
9static sapi_module_struct cgi_sapi_module = {
"cli",
...
sapi_cli_ub_write,
sapi_cli_flush,
...
NULL,
...
};
sapi模块结构体
1 | struct _sapi_module_struct { |
cli_sapi_module 的定义
1 | static sapi_module_struct cli_sapi_module = { |