1.sapi
sapi目录是对输入输出层的抽象,是PHP对外提供服务的规范。
PHP支持多场景交互,为不同的场景模式编写独立的程序。
多个模式抽象出了相同的模板(源码实现为结构体sapi_module_struct),其定义了模式启动、关闭、激活(处理请求前)、失效(处理请求后)等多个钩子函数指针。每一个模式将这些函数指针指向自己的函数,实现不同模式之间处理输入,输出的差异化。
定义一个对外服务,只需实例化一个新的sapi_module_struct,并实现需要的钩子函数即可。
常用的sapi:
apache2handler
cgi-fcgi
fpm-fcgi
cli
2.Zend目录源码
Zend目录是php的核心代码
1.内存管理模块
2.垃圾回收
3.数据实现
3.main目录源码
main目录是SAPI层和Zend层的粘合剂。
Zend 层实现了 PHP 脚本的编译和执行,sapi 层实现了输入和输出的抽象,main 目录则起到了承上启下的作用。
4.ext目录源码
ext是php相关拓展的目录,常用的arr,str,pdo等函数都在这里定义
5.TSARM目录源码
TSRM 是 Thread Safe Resource Manager 的缩写——线程安全资源管理器