Heim  >  Artikel  >  php教程  >  《PHP 源代码分析》第一章 构建系统 之 准备工具、库及需要具备

《PHP 源代码分析》第一章 构建系统 之 准备工具、库及需要具备

WBOY
WBOYOriginal
2016-06-06 19:59:041098Durchsuche

http://www.yanbin.org/commentary-on-php-chap1_1-prep/ 源码分析,首先得看源码。记事本可以看,EditPlus 也可以看,但显然具有语法着色功能的 EditPlus 要比记事本爽。更显然,M$ 的 Visual C++ 比 EditPlus 还要爽。:D 因此我推荐的第一款神兵就是 M$ Vi

http://www.yanbin.org/commentary-on-php-chap1_1-prep/

源码分析,首先得看源码。记事本可以看,EditPlus 也可以看,但显然具有语法着色功能的 EditPlus 要比记事本爽。更显然,M$ 的 Visual C++ 比 EditPlus 还要爽。:D 因此我推荐的第一款神兵就是 M$ Visual C++(Sorry, Linuxer~)。既然用了 Visual C++ 那么有一款它的插件我们不得不提:Visual Assist X,还没有她的朋友尽快拥有她吧~

OK,现在源码是可以看了,而且是很舒服地在看,但有时我们还想实地进行单步调试以一窥究竟。要调试自然得先编译。很不幸,PHP 在 Windows 环境下的编译和调试并不像想象中的那么简单。我们至少得比在 xNix 环境下多做一下几个步骤:

  1. 下载 PHP 使用的 DNS 解析器的源代码(http://www.php.net/extra/bindlib_w32.zip)并将其编译输出一个名为 resolv.lib 的库文件。
  2. 下载 win32 编译工具 http://www.php.net/extra/win32build.zip ,解压至某一目录(假定为 $work)。在 $work/lib 目录里面也有个 resolv.lib,我们把步骤 1 产生的 resolv.lib 复制到这个目录,覆盖之。
  3. 设置编译环境。把 $Work/bin 添加到系统 PATH 环境变量和 Visual C++ 的 Executable files 目录;把 $work/lib 添加到 Library files 目录;把 $Work/include 添加到 Include files 目录。
  4. 下载 PHP 源文件并解压至 $work 。
  5. 整理 PHP 的项目工程文件。PHP 4.x 的 VC 工程文件($PHP/win32/php4ts*.dsw)是当时一直在维护的,因此可以直接拿来就用。PHP 5.x 增加了一种新的基于命令行的类 Unix 编译系统,使得编译 PHP 更为简单。于是相应的工程文件 php5ts*.dsw 便不再被 PHP 团队维护,也不能直接使用编译 PHP 5 了。但我们恰恰不想单纯的编译,我们想的是在 Visual C++ 里面进行编译然后下断点单步调试,因此我们就需要命令行编译系统的编译流程重建这个项目工程文件(可能还需要对某些文件做些必要的改动)。

为方便大家不做重复性劳动,我把我现在用的 PHP 调试环境打包发上来,大家下载后直接解压到某一目录即可。所需另外做的也只是根据你解压的目录设置一下编译的环境变量(见步骤 3),之后就可直接进入 $work/win32 打开 php5ts.dsw(VC6)或 php5ts.sln(VC2005)。

点击下载该 PHP win32 AllinOne 包。

工程文件说明:这其实是个“精简版”PHP 的工程文件,里面的 PHP 是 php 5.2.1 的源码,但只包含 date、reflection、session、standard 这四个内建扩展。另外 php5apache2 的 sapi 不能编译,要想编译它得再去下一份 Apache 2 的源码。除此之外还删除了大部分的测试脚本。

最后再说一下分析 PHP 源代码所需要一些基础知识。首先当然得有一定的 C 语言基础。在最后分析 Zend Engine 时可能还需要一些编译器方面知识,最好能看懂一些 lex&yacc 的语法文件(PHP 采用的是 flex 和 bison,但在语法层面相差无几)。最后是能有一定的调试技术。包括在 VC++ 环境下的有源码调试技术和无源码的二进制代码调试技术(这种情况下我一般用OllyDbg)。其中 C 语言基础是必须的,而后面的两种知识/技术则可有可无,但有的话可以达到事半功倍之效。

 
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn