除了PHP自带的众多模块,以及很多现成的已经编译好的(比如很多Linux发行版就这么干的)PHP扩展外,我们总是不可避免的,偶尔会遇到需要自己编译PHP扩展模块的情况。尤其是MacOSX平台下,现成的编译好的二进制扩展更是稀缺。

这里以MAMP作为平台(自然,就暗示是在MacOSX下了)为例进行介绍。之所以选择这个平台的原因,是因为作为OSX官方自带的PHP,会把PHP的开发包(众多的/usr/include/php下的头文件)全部带上。因此只需要在通过HomeBrew这类工具安装好autoconf,以及通过XCode安装好Command Line Tools之后,只需要执行pecl install即可编译安装相应的扩展。

但是通常情况下,OSX自带的PHP版本都不符合我们要求。所以我们才会选择MAMP这样的平台工具。但是这类工具的缺点是不会配上开发包,这样以来虽然也有pecl、phpize,但是却无法编译。

解决方法自然就是手动下载PHP,然后提取其中的头文件,并放置到合适的位置(MAMP/bin/php/php-version/include)即可。

然后下载要编译的扩展(这里以ssh2为例),解压后进入该目录:

  • 执行MAMP/bin/php/php-version/bin/phpize,以配置和检查PHP编译所需要的环境、PHP及Zend的版本;

  • 执行./configure配置代码;

  • 执行make编译扩展;

  • 执行make install或者将modules/下的.so文件复制到PHP的扩展目录中。

需要注意的是,在之前提取头文件的时候,源代码的版本要和运行的版本一致,至少不要比运行版本低。要不然编译出来的扩展会提示API版本过低而无法加载。