PHP7内核学习笔记 - 内核结构
根据个人的理解,PHP内核结构可以大体分成
SAPI+main+Zend+Ext+TSRM
- 其中
SAPI是最外层的,其全称为Server abstraction API,它是PHP提供对外服务的规范,主要负责处理输入和输出。 它可以直接对接web服务器,如Apache、Nginx等,接收这种来自Web服务器的网络请求并返回相应的响应数据。而在cli运行方式下,它接收的则是命令行的输入,最终也会返回命令行的输出。总的来说它提供一系列的PHP接口,使得PHP可以和其他的应用程序进行交互。所以SPAI并不只有一种,大致有apache2handler,cgi,cli,embed,fpm这几种。
apache2handler:用于Apache以模块方式运行PHP的情况。PHP编译后生成.dll或.so扩展,在Apache中进行配置。Apache接收到php的处理请求后调用PHP扩展进行处理。此处就是进行php文件解析的入口cgi:普通CGI模式下web server(e.g.Apache、Nginx)将满足CGI协议的请求交给CGI进程进行处理cli:php文件以命令行方式进行调用时候的处理入口embed:内嵌模式。PHP是用C语言编写的,所以可以在C语言中调用PHP文件。这种情况下就以此作为入口fpm:全称为FastCGI Process Manager,可以理解为CGI的升级版本,通常在Nginx下使用。Nginx依据Fast-CGI协议将请求交给php-fpm进行处理
main层起到了一个承上启下的作用。SAPI接收输入数据后无法自己处理;Zend引擎虽然可以执行代码,但是它肯定需要在哪边进行唤起。main层就在中间起到了一个过度的作用;另外模块的初始化等工作也需要在这边进行;
Zend引擎是脚本最终解析,执行并得到结果的地方;Ext作为扩展并不独立存在,它可以理解为Zend的附属部分;
TSRM全称是Thread Safe Resource Manager–线程安全资源管理器。它是保证共享资源的安全的一种机制。

浙公网安备 33010602011771号