如何为 phpize 设置 PHP Api 版本

如何为 phpize 设置 PHP Api 版本

我正在我的服务器上升级 php,但是我遇到了 phpize 和编译外部模块的问题。phpize -v 报告:

Configuring for:
PHP Api Version:         20041225
Zend Module Api No:      20090115
Zend Extension Api No:   220090115

但在我的测试服务器(我正在尝试复制)上我得到了这个:

Configuring for:
PHP Api Version:         20090626
Zend Module Api No:      20090626
Zend Extension Api No:   220090626

我正在运行 debian squeeze,从实验仓库中提取 php 5.3.0-2 软件包。两台服务器之间的区别在于,第一台服务器上安装了旧版本的 php,而测试服务器从一开始就安装了 php 5.3.0-2。

我尝试从第一台服务器卸载所有 PHP 包(使用 --purge 删除所有配置文件)并重新安装 5.3 版,但问题仍然存在。求助!

答案1

我自己解决了这个问题——安装 php5-dev 5.3 会给你一个 phpize 和一个 phpize5。phpize5 拥有所有最新的 API。不过,我仍然想知道如何让默认的 phpize 拥有这些 API——至少,没有符号链接。

答案2

如何:

phpize是一个简单的 shell 脚本,您可以查看它正在做什么。当使用 调用时,它--version会执行此操作。为了简洁起见,我删去了相当多的内容。

prefix='/usr/lib/php5'
includedir="`eval echo ${prefix}/include`/php"
SED="/bin/sed"
..
PHP_API_VERSION=`grep '#define PHP_API_VERSION' $includedir/main/php.h|$SED 's/#define PHP_API_VERSION//'`
ZEND_MODULE_API_NO=`grep '#define ZEND_MODULE_API_NO' $includedir/Zend/zend_modules.h|$SED 's/#define ZEND_MODULE_API_NO//'`
ZEND_EXTENSION_API_NO=`grep '#define ZEND_EXTENSION_API_NO' $includedir/Zend/zend_extensions.h|$SED 's/#define ZEND_EXTENSION_API_NO//'`
..
echo "PHP Api Version:        "$PHP_API_VERSION
echo "Zend Module Api No:     "$ZEND_MODULE_API_NO
echo "Zend Extension Api No:  "$ZEND_EXTENSION_API_NO

prefix顶部的变量在编译 PHP 时是固定设置的。是/usr/lib/php5我在该机器上的安装位置。phpize所做的就是查看该前缀处的安装的头文件。我猜想您的phpize5路径与 完全不同phpize

为什么:

也许您的安装需要区分旧版本和新版本,因此重命名了其中一个版本。这可能是由于之前在同一台计算机上安装了 4.x 版本。

答案3

这应该是一条评论,但我找不到评论链接。这实际上是对上一个答案的回复。

那么我是否可以认为 phpize 文件是编译 PHP 的副作用,为您的系统定制的?也许我使用的 mac ports 程序拉入了一个预编译的二进制文件,这就是我没有 phpize5 的原因。我真的不知道它是如何工作的。但您的意思是,如果您破解 phpize 并使其指向较新的 PHP 安装,它将拉出正确的 API # 来匹配?啊,那里有很多东西需要更改!我宁愿让一个程序来做这件事,它会问你东西在哪里,这样你就可以确定并更改所有需要更改的内容。

相关内容