PHP内核深度解析,SAPI是如何工作的?

PHP SAPI(Server API)是PHP与Web服务器之间的接口,它定义了如何与Web服务器通信。

SAPI

PHP内核深度解析,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):每个扩展的模块关闭函数,用于关闭自己的内核子系统。

PHP内核深度解析,SAPI是如何工作的?

相关问题与解答

1、问题一:为什么使用FastCGI模式可以提高Web服务器的性能和稳定性?

解答:FastCGI是一种特殊的CGI模式,是一种常驻进程类型的CGI,运行后可以Fork多个进程,不用花费时间动态的Fork子进程,也不需要每次请求都调用MINT/MSHUTDOWN,这样可以减少系统开销,提高性能和稳定性。

2、问题二:什么是PHP模块的初始化阶段(MINT)?

解答:PHP模块的初始化阶段(MINT)是在PHP实例生命周期内只执行一次的过程,用于初始化扩展内部变量、分配资源和注册资源处理器。

以上就是关于“深入理解PHP内核(二)之SAPI探究”的问题,朋友们可以点击主页了解更多内容,希望可以够帮助大家!