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

转载 2007年09月30日 22:08:00
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 语言基础是必须的,而后面的两种知识/技术则可有可无,但有的话可以达到事半功倍之效。

 

相关文章推荐

Android系统源代码情景分析之基础知识

目前,互联网行业正在朝着移动互联网方向强劲地发展,而移动互联网的发展离不开背后的移动平台的支撑。众所周知,如今在移动平台市场上,苹果的iOS、谷歌的Android和微软的Windows Phone系统...

Android系统源代码情景分析:基础知识

Android系统源代码情景分析:基础知识 作者 罗升阳 发布于 2011年12月14日 领域  语言 & 开发  主题  移动 ,  Android系统源代码情景分析  ...

Android系统源代码情景分析:基础知识

http://www.infoq.com/cn/articles/lsy-android-base Android学习启动篇 http://blog.csdn.net/luoshengyang...
  • hsg77
  • hsg77
  • 2012年02月10日 14:05
  • 1193

学习笔记:第一章 计算机系统基础知识

1、数值X的原码记为[X]原,如果机器字长为n(即采用n个二进制位表示数据),则最高位是符号位,0表示正号,1表示负号,其余的n-1位表示数值的绝对值。数值零的原码表示有两种形:[+0]原=00000...

第一章 计算机基础知识

  • 2017年06月21日 10:20
  • 1.87MB
  • 下载

android内存分析工具- 内存基础知识(2)

一 Android内存基础知识1.四种引用类型1)强引用(Strong Reference) 就是为刚被new出来的对象所加的引用,它的特点就是,生命周期长,不会因为内存紧张而被回收。 Objec...

c语言第一章基础知识练习答案

  • 2011年07月28日 17:51
  • 128KB
  • 下载

uml课件第一章基础知识.ppt

  • 2011年06月23日 11:24
  • 213KB
  • 下载

第一章、基础知识(Part 1)

第一章、基础知识 1.1 安装Python Windows Linux 和 Unix 在绝大多数Linux 和 Unix 的系统安装中(包括Mac OS X),Python的解释器就已经存在,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:《PHP 源代码分析》第一章 构建系统 之 准备工具、库及需要具备的基础知识
举报原因:
原因补充:

(最多只允许输入30个字)