在开始学习PHP实现之前, 我们需要一个实验和学习的环境。下面介绍一下怎样在*nix环境下准备和搭建PHP环境。
(*nix指的是类Unix环境,比如各种Linux发行版,FreeBSD, OpenSolaris, Mac OS X等操作系统)
为了学习PHP的实现,首先需要下载PHP的源代码。下载源码首选是去PHP官方网站http://php.net/downloads.php下载, 如果你喜欢使用svn/git等版本控制软件,也可以使用svn/git来获取最新的源代码。
#svn cd ~ svn co http://svn.php.net/repository/php/php-src/branches/PHP_5_2 php-src-5.2 #5.2版本 svn co http://svn.php.net/repository/php/php-src/branches/PHP_5_3 php-src-5.3 #5.3版本 #git cd ~ git clone git://github.com/php/php-src.git php-src
笔者比较喜欢用版本控制软件签出代码,这样做的好处是能看到PHP每次修改的内容及日志信息,如果自己修改了其中的某些内容也能快速的查看到 。(当然你还可以试着建立属于自己的源代码分支)
在笔者编写这些内容的时候PHP版本控制是还基于SVN的,上面提到的git镜像地址目前已经没有同步更新了, 由于把svn同步到git会对系统性能造成明显影响,加上社区还没有就到底是否迁移到git达成一致,所以也就停止了更新。 目前很多开源软件都开始转向了分布式版本控制系统(DVCS), 例如Python语言在转向DVCS时对目前的分布式版本控制系统做了一个详细的对比, 如果以前没有接触过,笔者强烈建议试试这些版本控制软件。
在*nix环境下,需要安装编译构建环境。如果你用的是Ubuntu或者是用apt做为包管理的系统,可以通过如下命令快速安装:
sudo apt-get install build-essential
如果你使用的是Mac OS,则需要安装Xcode。Xcode可以在Mac OS X的安装盘中找到,如果你有Apple ID的话, 也可以登陆苹果开发者网站http://developer.apple.com/下载。
下一步可以开始编译了,本文只简单介绍基本的编译过程,不包含Apache的PHP支持以及Mysql等模块的编译。 相关资料请自行查阅相关文档。 如果你是从svn/git签出的代码则需要执行代码根目录的buildconf脚本以生成所需要的构建脚本。
cd ~/php-src ./buildconf
执行完以后就可以开始configure了,configure有很多的参数,比如指定安装目录,是否开启相关模块等选项:
./configure --help # 查看可用参数
为了尽快得到可以测试的环境,我们仅编译一个最精简的PHP。通过执行 ./configure --disable-all来进行配置。 以后如果需要其他功能可以重新编译。如果configure命令出现错误,可能是缺少PHP所依赖的库,各个系统的环境可能不一样。 出现错误可根据出错信息上网搜索。 直到完成configure。configure完成后我们就可以开始编译了。
./configure --disable-all make
在*nix下编译过程序的读者应该都熟悉经典的configure make,make install吧。执行make之后是否需要make install就取决于你了。 如果install的话最好在configure的时候是用prefix参数指定安装目录, 不建议安装到系统目录, 避免和系统原有的PHP版本冲突。 在make 完以后,在sapi/cli目录里就已经有了php的可以执行文件. 执行一下命令:
./sapi/cli/php -n -v
命令中的-n参数表示不使用php.ini文件,-v参数表示输出版本号,如果命令执行完后看到输出php版本信息则说明编译成功。 如果是make install的话则执行$prefix/bin/php这个路径的php。 当然如果是安装在系统目录或者你的prefix目录在$PATH环境变量里的话,直接执行php就行了。
在只进行
make
而不make install
时,只是编译为可执行二进制文件,所以在终端下执行的php-cli所在路径就是php-src/sapi/cli/php
。
后续的学习中可能会需要重复configure make 或者 make && make install 这几个步骤。