后端开发干货:PHP源码阅读技巧
写在前面
时光匆匆 光阴似箭,今年已经是小张做码农的第N个年头了,得益于世界上最好的语言(PHP),小张的头发依旧茂密。但是项目写了一个又一个,PHP、用到飞起,这些年的成长却大不如从前。
你是否也纠结于此,今天让我们换个角度看PHP,打开源码从C的角度看PHP,看一眼这个具有20年历史的庞大C项目是如何工作的。
从这一刻开始,你将荣升为C程序员,你可以去温习一下C的语法、结构体、指针和引用。
你也许会问,看个代码git拉一下用打开不就好了吗php后端,为什么要写个KM。确实这样可以看代码,但那叫看代码片段,不是看工程。PHP项目需要兼容、Linux、Mac平台还要处理线程安全,其代码包含大量宏定义。我们需要借助IDE的自动跳转和提示才能更好的阅读。
我们需要一个IDE无错误提示的项目。(当你要看一个方法却无法跳转的时候,真是太难受了)

配置
是内部用于开发调试的linux虚拟机。没有的小伙伴可以自己准备一台可以ssh的虚拟机php后端,本地虚拟机或云平台都可以。(最好网络能好一点,后面要传不少东西)
cmake re2c
后面我们需要使用Clion作为C项目的IDE,Clion需要使用cmake作为项目自动化构建工具。所以我们首先需要安装cmake 上的yum默认的cmake版本为2.8.12.2符合要求,这里就直接用yum安装。
yum cmake
re2c 是语法生成器
yum
的gdb版本过低,这里需要手动安装一个符合要求的版本,我选了7.8.2
wget zxvf gdb-7.8.2.tar.gzcd gdb-7.8.2./
代码拉取
选择一个php版本,这里我用7.1.33版本。 有几个理由:
1.项目中使用了这个版本。
2.php7对内核做了大量的改动,之前的php5已经不适合学习了。
3.后续会介绍的书籍也是基于php7.0的版本和php7.1比较接近。
4.php8目前还在测试,且和php7比较接近。
注意:本地远程都拉取一份,要保持tag一致,两边都要执行下面的cmake改造
git clone php- tag -lgit php-7.1.配置

工欲善其事必先利其器,要看代码需要选一个好的IDE,多年使用的我推荐使用全家桶里面的Clion。一般我们不会直接使用Linux做桌面系统,这里使用Clion的远程部署功能配合做环境部署。我的本地是环境,构建编译在远端的进行。(用WSL也是一样的,但是PHP的git仓库太大在WSL中做git操作非常卡,应该是WSL文件系统的bug)
PHP cmake改造
这一步是阻止大部分同学使用Clion查看PHP源码的主要原因。PHP项目由于历史悠久一直使用作为项目自动管理工具。然而Clion并不支持,它需要项目使用cmake构建,因此我们需要对php的源码做cmake构建改造。
官网有一份cmake的改造文档。
上也有对应的代码。
但是这个文档和代码都太老了,应该是PHP5年代的代码。我对这个项目做了一些升级,兼容了PHP7(水平有限可能存在问题,欢迎提PR)。
在本地执行如下命令,clone php-cmake项目,切换分支,拷贝php-cmake/cmake中的所有文件到php源代码目录。注意目录合并。
git clone php- / -r cmake/* ../php-src //这里是php源码的路径配置
这里设置远程机器的信息,设置相关工具的路径。一般会自己识别,如果不能识别可以手动输入。会检查版本,默认上的版本好像都不正确需要自己升级。

配置
这里需要设置代码同步的目录,设置好以后点按√好设置为默认。完成上面设置后,这里可能默认出现一个的信息,但是 里面的 path是/tmp/目录下面,你可以删除自己配置,也可以直接修改 path到你需要的项目目录。

注意:这里的Local path如果是上需要使用/分割路径,不是默认的\,否则在执行cmake构建的时候会提示目录无法找到。

在里面可以设置 不要同步.phpt文件,这是php项目中的测试用例文件。(我们在拉代码的时候其实已经会手动保证本地和远程机器的文件一致,但是Clion还会自己同步一次,设置这个可以加速同步速度。)

同步代码到。首次同步真的很慢,你需要耐心等待。

执行cmake构建,看看报错不?

由于PHP cmake构建会在远端生成一些文件后端开发干货:PHP源码阅读技巧,我们需要同步这些文件到本地,否则打开代码会因为这部分.c .h文件不存在导致代码没有提示php后端后端开发干货:PHP源码阅读技巧,各种报错。

选择比对方式 用Size adn 会快一点,这里比较慢,耐心等待一下。


分析完成以后,就可以看到远程比本地多的文件了,我们需要把他们同步到本地。最上面的.clion… 不需要同步,可以点击红框中的箭头取消。 之后点击同步。

打开.c看看源码,是不是干干净净一个红线都没有。
断点
光看肯定是不行的,最好能把代码跑起来 打个断点可以更深入的了解运行机制。你可以用gdb去断点。我这里既然用了clion就直接用clion的断点功能,用起来更直观。
1、准备一个yong.php 写一点代码用来做测试文件。
2、这里配置运行配置。

3、设置 和

4、把yong.php文件同步到远端。执行以下看看。

5、打断点。真的很爽~~

开始阅读目录结构
PHP项目有很多目录,大概功能如下:
├── CMake //用于cmake构建的文件,我们做cmake 改造的时候拷贝进去的。├── TSRM //线程安全相关,你如果刚开始看就先忽略 不要看了├── Zend //Zend内核的代码├── //一些脚本 忽略├── build // 构建用脚本 忽略├── cmake-build-debug //cmake构建后产物 忽略├── ext //扩展目录,这块可以找感兴趣的扩展看一下├── main //主要的php逻辑 ├── //用于兼容操作系统的 直接忽略├── pear //忽略├── sapi //入口部分,fpm cgi 都在这里,我们可以先看一下cgi目录├── //脚本忽略├── tests //测试用例 忽略├── //构建用 忽略└── win32 //兼容系统 忽略
其实和源代码相关的 只有这几个目录, 在Clion中标记为和目录方便IDE构建索引。
\\

从哪里开始
准备工作都做好了,还有借口不看代码吗?如果你还是不知道从哪里开始,那我推荐从main函数开始吧。 它在sapi\cli\.c的最后面。 附图一张可以和源代码结合起来看。 图片引自:
最后推荐一本书 秦朋 的 《PHP7内核剖析》

1. 本站所有资源来源于用户上传和网络,如有侵权请联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系站长处理!
6. 本站不售卖代码,资源标价只是站长收集整理的辛苦费!如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
7. 站长QQ号码 2205675299
资源库 - 资源分享下载网 » 后端开发干货:PHP源码阅读技巧
常见问题FAQ
- 关于资源售价和售后服务的说明?
- 代码有没有售后服务和技术支持?
- 有没有搭建服务?
- 链接地址失效了怎么办?
- 关于解压密码

