先说说php的五大模式:
1.CGI
2.FASTCGI
3.CLI,command line interface,命令行模式
4.mod_php5,apache嵌入php模块
5.isapi
php底层使用c语言,
在PHP生命周期的各个阶段,一些与服务相关的操作都是通过SAPI接口实现。这些内置实现的物理位置在PHP源码的SAPI目录。这个目录存放了PHP对各个服务器抽象层的代码,例如命令行程序的实现,Apache的mod_php模块实现以及fastcgi的实现等等
在各个服务器抽象层之间遵守着相同的约定,这里我们称之为SAPI接口。每个SAPI实现都是一个_sapi_module_struct结构体变量。(SAPI接口)。在PHP的源码中,当需要调用服务器相关信息时,全部通过SAPI接口中对应的方法调用实现,而这些方法在各个服务器抽象层实现时都会有各自的实现。由于很多操作的通用性,有很大一部分接口方法使用的是默认方法。下图为SPAI的简单示意图
SAPI是php与其他应用交互的接口,在其生命周期的各个阶段,一些与服务相关的操作都是通过SAPI接口实现 ,内置虚拟接口。
CGI规定了php与web server交流的规则,相当于执行了response = exec("php -f index.php -url=xxx -cookie=xxx -xxx=xxx"),CGI的实现符合SAPI规则。
nginx->socket fastcgi->cgi实现(SAPI启动入口函数)