PHP7内核学习起步!
发布于:2019-2-15 17:48 作者:song100e 浏览:545 分类:内核剖析学习PHP7 版本的发布,Zend 引擎被再次重写,并以 Zend Engine 3.0 的身份亮相,使得 PHP 语言的性能得到大幅度提升,大量测试显示 PHP7 比 PHP5.6 在各种开源项目中有 60% 到 200% 的性能提升。学习和研究 PHP7 内核对于提升个人使用水平和内功很有必要。
一,源码下载及安装
$ wget http://php.net/distributions/php-7.0.12.tar.gz $ tar zxvf php-7.0.12.tar.gz $ cd php-7.0.12/ $ ./configure --prefix=/usr/local/php-7.0.12 --enable-debug --enable-fpm $ make && sudo make install
二,目录概览
以 php-7.0.12 为例,下面是每个目录的说明。
目录 | 说明 |
---|---|
TSRM | 线程相关安全的实现 |
Zend | PHP 解析器的核心实现 |
build | linux 下编译相关的目录 |
ext | PHP 的扩展 |
main | PHP 的主要代码 |
netware | 网络目录,socket 的定义与实现 |
pear | PHP 扩展及应用的代码仓库 |
sapi | PHP 的应用层接口 |
scripts | Linux 下的脚本目录 |
tests | 测试脚本目录 |
travis | 用于构建,非 PHP 特有目录 |
win32 | Windows 下编译 PHP 的相关脚本 |
三,核心目录
- sapi 全称 Server API,负责 PHP 对外提供服务规范,它定义了结构体 sapi_module_struct,该结构体定义了模式启动、关闭、激活、失效等多个钩子函数指针,每个模式将这些函数指针指向自己的函数。
- main 目录的作用是承接 SAPI 的请求,分析出要执行的脚本文件和参数,并对环境和配置进行初始化,比如初始化变量和常量、注册函数、解析配置文件、加载扩展等等。
- Zend 目录就是大家所熟知的 Zend 引擎,是 PHP 最核心的部分,主要负责 PHP 的语法实现、内存管理及脚本的编译运行环境等,它由编译器、执行器两部分组成。编译器负责将 PHP 代码进行词法、语法分析,并生成抽象语法树,然后进一步编译为 opcode,opcode 是 Zend 虚拟机可识别的指令。
- ext 是 extension 的缩写,它是扩展 PHP 内核功能的一种方式,分为 PHP 扩展 与 zend 扩展,都支持用户自定义开发,这两种都比较常见,PHP 扩展有 gd、json、date、array 等,而我们熟知的 opcache 就是 Zend 扩展。
-
TSRM 全称叫做 Thread Safe Resource Manager,也就是线程安全资源管理器。