8

Hello World我用 Microsoft Visual C++ 2008创建了一个 PHP扩展 DLL。我有权利php.ini(我知道,因为当我启用和禁用 gd2 扩展时,会有效果),但是当我加载扩展时它不会在 Additional Modules 下弹出在phpinfo().

当我尝试测试该功能(一个简单的double()功能)时,它显然不起作用。我使用了本教程)。

如果有人可以提供他们在执行此操作时创建的 dll(查看我的是否搞砸了或者它是否是我的服务器),那么我很乐意对其进行测试。

系统规格

操作系统:Windows (Vista)
服务器:WAMP
PHP:5.3.5(还安装了 Xampp 和 IIS)

当我运行命令时,php --ini我收到此错误:

PHP Startup: TalkPHP Extension: Unable to initalize module
Module compiled with build ID=API20090626, TS, VC9.
PHP   compiled with build IF=API20090626, TS, VC6.
These options need to match

这是否意味着我必须使用版本 9 来编译 PHP?

4

3 回答 3

2

VC9 和 VC6 版本不兼容。您要么必须使用 VC6 编译 DLL,要么从他们的下载页面获取使用 VC9 编译的 PHP 二进制文件。

如果您使用 Apache 和 mod_php,您还需要 Apache 的 VC9 构建来加载 VC9 PHP,您可以从apachehaus.com获得这些。

于 2011-02-07T15:39:16.237 回答
1

评论中的解决方案...

-我找到了解决方案forums.zend.com/viewtopic.php?f=55&t=2045

- 可能重复:问题:stackoverflow.com/questions/3641751/

我收到这些警告

c:\wamp\bin\php\php-5.3.5src\zend\zend_build.h(19) : warning C4005: 'PHP_COMPILER_ID': macro redefinition c:\wamp\bin\php\php-5.3.5src\main\config.w32.h(189) : see previous definition of 'PHP_COMPILER_ID' 1>
c:\wamp\bin\php\php-5.3.5src\main\config.w32.h(189) : warning C4005: 'PHP_COMPILER_ID' : macro redefinition 1> 
c:\wamp\bin\php\php-5.3.5src\zend\zend_build.h(19) : see previous definition of'PHP_COMPILER_ID'

我认为这与我的实际说是用 VC9 编译的事实有关,而在其他情况下它什么都没有。(它们是警告,但我认为这就是它不起作用的原因)

好的,什么也没做,只是尝试了一下,但是当我运行扩展程序时它工作了。我仍然从 php --ini 得到错误,但它运行并工作。

于 2011-02-08T00:05:02.673 回答
0

我编译并成功运行了一个自定义 php 扩展。

您可以尝试以下方法:

  • 从 php-5.3.5 获取 vc9 构建
  • 不要在 zend_build.h 头文件中 #define PHP_COMPILER_ID (恕我直言,无论如何这都是个坏主意)
  • 您可能也在 config.w32.h 中定义了 PHP_COMPILER_ID;去掉它
  • 在您的项目设置(C/C++ - 预处理器)中定义:PHP_COMPILER_ID=\"VC9\"(如果您需要 php 的 vc6 构建,那么我会尝试定义 PHP_COMPILER_ID=\"VC6\";我不知道这是否工作没有问题,但我使用星座 [php-5.2.x vc6,用 vc9 编译的自定义 php 扩展] 没有问题,永远)
于 2011-02-15T22:43:42.780 回答