使用Delphi 2010和php4Delphi编写PHP扩展

5
首先,这是关于php4Delphi而不是RadPHP(以前的Delphi For PHP)。
使用:
- Delphi 2010 - PHP 5.3.6(VC9,NTS) - php4Delphi 7.2(使用VC9编译指令) - Windows Server 2008 R2 - IIS 7
当尝试在IIS / PHP服务器上运行php4Delphi delphi_math.dll示例扩展时,在C:\ Windows \ Temp \ php-errors.log文件中看到以下错误:
[15-Jun-2011 17:58:42] PHP Warning: PHP Startup: Unable to load dynamic library 'C:\Program Files (x86)\PHP\ext\delphi_math.dll' - A dynamic link library (DLL) initialization routine failed. in Unknown on line 0

我已经解决了PHP找不到我的扩展的初始问题,所以这不是路径样式问题。

我在想php4Delphi 7.2可能不支持最新的PHP 5.3.6。是否有人成功地在这个配置下工作过?

3个回答

6

PHP尝试内部加载模块并失败,您是正确的。

问题不在搜索路径中,而在于使用了php4delphi的非线程安全版本与php。当php加载扩展时,它从扩展dll接收一些回调函数的列表,并将其用于与dll通信。线程安全和非线程安全版本的php回调函数参数列表不同。

php4delphi是为php的线程安全模型而设计的。您可以在此处阅读TS和NTS版本之间的差异:IIS Aid。在这种特殊情况下,如果可能的话,我建议将非线程安全的PHP更改为线程安全的PHP。

如果使用NTS PHP是必需的,则必须适应php4delphi的源代码,我认为在这种情况下需要进行大量更改。


感谢您关注此事并提供有关TS / NTS版本的链接。我错误地认为NTS是传统的PHP捆绑包,而TS是新的选择。现在我知道我搞错了,切换到TS PHP版本就不会有问题了。 - LachlanG

2

我刚刚使用PHP 5.3.6进行了php4delphi 7.2的测试,但线程安全版本和扩展程序并未如预期加载。我认为只有在使用命令行中的php.exe运行脚本时,您才能使用NTS版本,而不是在使用IIS时。无论如何,我也会进行NTS版本的测试,并让您知道结果。


0
在我看来,似乎是 PHP 本身(而不是 delphiphp)尝试在内部加载模块失败了。
可能是因为它在 PATH 中搜索 DLLs 来 loadlibrary(),但找到的是 64 位 DLLs 而不是 32 位 DLLs。最好先在 32 位 Windows 系统上尝试此设置。
附注:我从“program files (x86)”中得到了 64 位系统指示。

路径问题是我的第一个问题,但是我通过将PHP\ext目录添加到系统路径中(并重新启动)来解决了这个问题。不过这是另一个问题。无论如何感谢您的时间。 - LachlanG

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接