0

所以就是这种情况,我正在尝试为我的客户开发一个 php 扩展。我使用 SWIG 生成包装器代码,我的主要代码是 c++。成功创建扩展后,我将其加载到 /ext 并重新启动 Web 服务器以对其进行测试。我收到错误消息,提到扩展程序是使用 API 20090626 构建的,但 PHP 服务器(在我的情况下为 XAMPP)API 是 20100525。我完全理解错误,所以我在 php 源中打开 Zend_modules.h 头文件并将 API 编号从 20090626 更改为 20100525,然后我使用更新的 zend_modules.h 头文件构建我的扩展,现在我没有问题了。

问题是,我的客户肯定在使用具有不同 API 的不同 php 服务器,我打算给他们一个 dll(我的扩展),它可以轻松加载而没有任何困难。但现在我应该给他们一个 VS2010 解决方案,动态加载我的主要代码 (dll)。我的意思是每个用户应该首先从他自己的服务器检查 PHP API 并更改 Zend_modules.h 头文件,构建解决方案,然后使用扩展。我需要一个解决方案,使我的扩展完全独立于该 API 编号。

我真的很感激任何想法。

4

1 回答 1

3

我完全理解错误,所以我在 php 源中打开 Zend_modules.h 头文件并将 API 编号从 20090626 更改为 20100525

你这样做的事实告诉我你实际上并不理解这个错误。

模块在 PHP 的不同主要版本之间兼容—— Zend API 编号用于确保 PHP 不会无意中尝试加载为不同版本构建的模块。您对 PHP 构建树所做的修改会导致它构建在任何版本上都无法正常运行的模块。

如果您需要为多个主要版本的 PHP 构建模块,则需要使用相应版本的 PHP 运行构建。你不能混搭,也不能构建一个适用于多个版本的模块。(您也不应该建议您的用户修改他们的 PHP 构建以接受不兼容的模块。那只会让可怕的事情发生。)

下面列出了几个 PHP 版本的 API 版本:

  • PHP 5.2:20060613
  • PHP 5.3:20090626
  • PHP 5.4:20100525
  • PHP 5.5:20120211
于 2013-03-02T06:04:49.277 回答