《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 语言基础是必须的,而后面的两种知识/技术则可有可无,但有的话可以达到事半功倍之效。

 

Matlab需要掌握重要函数及基本技能

之前没有matlab编程经验,而在最近的项目中由于需要用到,所以恶补。在研究深度学习时遇到基于Caffe的CNN 源码许多都是基于matlab接口写的,比如RCNN, SPPNET, FAST RCN...
  • meng676401088
  • meng676401088
  • 2015年12月20日 12:06
  • 386

CTF基础知识

CTF基础知识一、语言运用 :计算机语言可以大致分为机器语言,汇编语言,高级语言,计算机每进行的一次动作,一个步骤,都是按照计算机语言编好的程序来执行。而在CTF比赛中,计算机语言的了解与掌握会有事半...
  • qq_39414668
  • qq_39414668
  • 2017年09月09日 17:33
  • 332

当包工头要具备哪些条件

有充足的流动资金、施工人员(简单点就是干活的)、懂业务的专业人员(包括施工员、技术员、资料员、预算员等)、管账目的材料员、设备等,能够处理好各种关系,当然,具体情况还得看你要干的是什么工程...
  • u014683488
  • u014683488
  • 2016年04月05日 11:57
  • 230

一个程序员应该具备的基础知识和概念

1、计算机是有什么组成的,CPU是什么东西,其工作原理是什么。(对于这些以及下面将要提到的概念我不会告诉你什么答案,你可以看相应的教材,关于教材我会在下一部分详述,记住理解最重要!)  2、机器语言...
  • w1158384189
  • w1158384189
  • 2014年01月20日 20:06
  • 856

《构建之法》第一章 概论

摘至 邹欣《构建之法》一书,以作学习之用 1. 大马哈鱼洄游模型 软件工程按照经典的瀑布模型 1. 需求分析 2. 设计阶段 3. 实现阶段 4. 稳定阶段 5. 发布阶段 6....
  • u011414200
  • u011414200
  • 2015年10月01日 23:09
  • 3732

系统准备工具 (Sysprep.exe) 实现OOBE用法

MSDN: sysprep 一.系统准备工具介绍 系统准备工具 (Sysprep.exe)用于准备供映像或交付给客户的 Windows 安装。 二.OOBE流程 Sysprep.exe->...
  • greless
  • greless
  • 2017年06月27日 16:34
  • 791

tensorflow基础知识

Tensorflow谷歌开源的机器学习库,备受大家喜爱。下面讲解一些必备的基本知识。 tensorflow的运行流程主要有2步,分别是构造模型和训练。 在这之前,讲几个概念: tensorflo...
  • a18852867035
  • a18852867035
  • 2016年12月27日 17:04
  • 915

PID基本知识讲解

首先帮大家解决一下什么是PID调节,为什么就要这样的疑惑。 PID是比例,积分,微分的英文单词的首字母的简称。   下面举个例子说明一下PID,让大家有个感官的认识,。 一个人...
  • wujiafei_njgcxy
  • wujiafei_njgcxy
  • 2016年11月20日 16:41
  • 382

《LINUX3.0内核源代码分析》第一章:内存寻址

摘要:本章主要介绍了LINUX3.0内存寻址方面的内容,重点对follow_page函数进行注释,以帮助读者大致了解ARM A9的页表组织。  读者需要理解一些基本概念:虚拟地址、物理地址、MPU、M...
  • ekenlinbing
  • ekenlinbing
  • 2012年05月29日 16:43
  • 929

CDN基础知识

CDN的基本概念 CDN,content distribute network(内容分发网络)或者content delivery network(内容交付网络)。很显然,CDN的任务是将内容从源...
  • mountains2001
  • mountains2001
  • 2016年10月08日 17:15
  • 467
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:《PHP 源代码分析》第一章 构建系统 之 准备工具、库及需要具备的基础知识
举报原因:
原因补充:

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