php内核分析:源码结构

一、目录结构

这里是以php-7.0为例,如下图所示


php内核分析:源码结构_第1张图片
image.png
目录说明:

1、build :linux下编译相关的目录
2、ext :php的扩展
3、main:php的主要代码
4、netware:网络编程目录,socket的编写和实现
5、pear:php的扩展以及应用的代码仓库
6、sapi:php的应用层接口
7、scripts: linux下的脚本目录
8、tests :测试的脚本目录,都是以phpt后缀的文件
9、travis : 用于构建,非php特有目录,都是一些sh脚本文件
10、TSRM:线程相关安全的一些实现
11、win32:windows下编译php的相关脚本
12、Zend : php解析器的核心实现

二、核心目录
1、SAPI

众所周知,php有多种方式形式,我们可以在浏览器中访问,也可以在命令行中访问,还可以在C语言中嵌入php程序。这里分别对应的是php的fpm/cgi模式、cli模式、embed模式,还有其他的模式apache2handler等模式,如下图,每种模式对应不同的文件夹名,对应的实现代码都在各自的目录文件中


php内核分析:源码结构_第2张图片
image.png
2、main

这个目录主要是与SAPI有关,SAPI的请求会传到main这里,然后main分析出要执行的脚步和参数,并对环境和配置进行初始化,比如要初始化的变量、注册函数、解析文件等

如下图
php内核分析:源码结构_第3张图片
image.png
3、Zend

这个目录就是php的zend引擎部分,也就是php最重要核心的部分。
就是这里zend引擎来负责php的语法实现、内存管理以及脚本的编译运行环境。由 编译器和执行器两部分组成。

4、ext

这个目录是php的扩展部分,这里支持者用户自定义开发,每个扩展以文件夹名区分,如下图


php内核分析:源码结构_第4张图片
image.png
5、TSRM(线程安全资源管理器)

不是说php只有单线程吗,为什么还有这个东西?
确实,php的大部分SAPI都是单线程的,但是只要服务器是多线程环境并且php以模块的形式提供,那么就需求启用TSRM了。比如apache或者用户自己实现的php环境下,就要考虑线程安全了。
线程是会影响到公共资源的,比如变量明明是1,结果变成了2,这都是需要考虑进行避免的。

你可能感兴趣的:(php内核分析:源码结构)