PHP扩展的不同API编号

时间:2013-03-02 05:21:32

标签: php dll php-extension

所以就是这样,我正在尝试为我的客户开发一个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号。

我真的很感激任何想法。

1 个答案:

答案 0 :(得分:3)

  

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

您这样做的事实告诉我您实际上并未理解错误。

模块在不同主要版本的PHP之间 NOT 兼容 - 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