如果您安装了多个 PHP 版本,则可以使用配置期间的 --with-php-config 选项来指定要构建哪个安装。
--with-php-config=[在此处插入适当的 php-config 路径]
例如(我的情况)
./configure --with-php-config=/usr/local/php5/bin/php-config5
有时,使用 pecl 安装程序不是一种选择。这可能是因为存在防火墙,或者因为要安装的扩展不可用为 PECL 兼容的软件包,例如来自 git 的未发布扩展。如果需要构建此类扩展,则可以使用底层构建工具手动执行构建。
phpize 命令用于为 PHP 扩展准备构建环境。在以下示例中,扩展的源代码位于名为 extname 的目录中。
$ cd extname $ phpize $ ./configure $ make # make install
成功安装后将创建 extname.so 并将其放入 PHP 扩展目录 中。需要调整 php.ini 文件,并添加 extension=extname.so
行,然后才能使用该扩展。
如果系统缺少 phpize 命令,并且使用预编译的软件包(如 RPM),请务必同时安装 PHP 软件包的相应开发版本,因为它们通常包含 phpize 命令以及用于构建 PHP 及其扩展的适当头文件。
执行 phpize --help 以显示其他用法信息。
如果您安装了多个 PHP 版本,则可以使用配置期间的 --with-php-config 选项来指定要构建哪个安装。
--with-php-config=[在此处插入适当的 php-config 路径]
例如(我的情况)
./configure --with-php-config=/usr/local/php5/bin/php-config5
当为 64 位堆栈(例如)编译扩展,而您的编译器配置为在 32 位模式下编译时,您可以使用 C 标志手动编译扩展,然后再进行配置。
示例:我的系统编译器是 32 位,我的堆栈是 64 位。要编译我的 xdebug
# phpize
# CFLAGS=-m64 CPPFLAGS=-m64 CCASFLAGS=-m64 ./configure --enable-xdebug
# gmake
# file modules/xdebug.so
modules/xdebug.so: ELF 64-bit LSB dynamic lib AMD64 Version 1, dynamically linked, not stripped, no debugging information available
在某些情况下(例如在 cPanel 服务器上),构建的扩展不会被 make install 进程放置到正确的扩展目录中。使用您的 phpinfo() 输出确定正确的 extension_dir 路径,并将生成的 .so 文件移动到该目录中。然后,php.ini 文件中的 extension=extname.so 行将正确找到扩展文件。
当您有多个 PHP 安装时,从特定安装运行 phpize 不会强制该模块使用该安装的包含文件进行编译。
在我的情况下,我安装了标准 PHP 发行版,并正在评估 Zend Core / Zend Platform,它在 /usr/local/Zend/.. 安装路径中安装了自己的 Apache 和 PHP。它缺少 json.so 模块,因此我不得不自己编译。
运行 Zend Core 的 phpize 时,输出表明该模块的配置将发生。但在运行 ./configure 时,使用了标准安装的包含文件。结果是 json.so 使用错误的 PHP 进行编译,当 Zend Core 的 php 初始化时将无法加载。
我唯一能看到的纠正这种情况的方法是暂时更改标准 PHP 包含路径以指向 Zend Core 的包含文件。在我的情况下,我对 /usr/include/php5 做了备份副本,并执行了 "ln -s /usr/local/Zend/Core/include/php/ /usr/include/php5"。
如果您无法运行 phpize 命令,则应该安装 php-devel 软件包。使用 yum 安装 php-devel 软件包的命令行是:yum install php-devel。
如果您无法编译 PECL 扩展,则应该安装 gcc 软件包。使用 yum 安装 gcc 软件包的命令行是:yum install gcc。