SAPI

1、定义:SAPI是Server Application Programming Interface(服务器应用编程接口)的缩写,PHP通过SAPI提供了一组接口,供应用和PHP内核之间进行数据交互。
2、作用:就像函数的输入和输出一样,我们通过Linux命令行执行一段PHP代码,本质是Linux的Shell通过PHP的SAPI传入一组参数,Zend引擎执行后,返回给shell,由shell显示出来的过程,同样的,通过Apache调用PHP,通过Web服务器给SAPI传入数据,Zend引擎执行后,返回给Apache,由Apache显示在页面上。
PHP提供的SAPI接口类型
| 类别 | 说明 |
| CLI/CGI | 命令行模式,每次请求都会初始化和关闭PHP环境。 |
| Multiprocess | 多进程模式,可以编译成Apache下的prefork MPM模式和APXS模块。 |
| Multithreaded | 多线程模式,在一个进程下创建多个线程,在同一个进程地址空间执行。 |
| FastCGI | 常驻进程类型的CGI,可以Fork多个进程,不需要每次请求都调用MINT/MSHUTDOWN。 |
| Embedded | 内嵌模式,允许在C/C++语言中调用PHP提供的函数。 |
PHP的运行流程
1、Module的Init(MINT):初始化扩展内部变量、分配资源和注册资源处理器,在整个PHP实例生命周期内,该过程只执行一次。
2、Request的Init(RINT):创建PHP运行环境,同时调用所有模块注册的RINT函数,设定特定的环境变量、分配资源或执行其他任务。
3、Request的Shutdown(RSHUTDOWN):每个扩展的请求关闭函数,执行最后的清理工作。
4、Module的Shutdown(MSHUTDOWN):每个扩展的模块关闭函数,用于关闭自己的内核子系统。

相关问题与解答
1、问题一:为什么使用FastCGI模式可以提高Web服务器的性能和稳定性?
解答:FastCGI是一种特殊的CGI模式,是一种常驻进程类型的CGI,运行后可以Fork多个进程,不用花费时间动态的Fork子进程,也不需要每次请求都调用MINT/MSHUTDOWN,这样可以减少系统开销,提高性能和稳定性。
2、问题二:什么是PHP模块的初始化阶段(MINT)?
解答:PHP模块的初始化阶段(MINT)是在PHP实例生命周期内只执行一次的过程,用于初始化扩展内部变量、分配资源和注册资源处理器。
以上就是关于“深入理解PHP内核(二)之SAPI探究”的问题,朋友们可以点击主页了解更多内容,希望可以够帮助大家!