5

首先这是关于php4Delphi而不是RadPHP(以前的 Delphi For PHP)。

使用

  • 德尔福 2010
  • PHP 5.3.6 (VC9, NTS)
  • php4Delphi 7.2(使用 VC9 指令编译)
  • 视窗服务器 2008 R2
  • IIS 7

当尝试在 IIS/PHP 服务器上运行 php4Delphi delphi_math.dll 示例扩展时,我在 C:\Windows\Temp\php-errors.log 文件中看到以下错误。

[15-Jun-2011 17:58:42] PHP 警告:PHP 启动:无法加载动态库 'C:\Program Files (x86)\PHP\ext\delphi_math.dll' - 动态链接库 (DLL) 初始化例行公事失败。在第 0 行的未知中

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

我在想 php4Delphi 7.2 可能不支持最新的 PHP 5.3.6。有没有人让这个配置为他们工作?

4

3 回答 3

6

PHP 尝试在内部加载模块并失败,你是对的。

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

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

如果需要使用 NTS PHP,那么必须修改 php4delphi 的源代码,我认为在这种情况下需要进行很多更改。

于 2011-06-15T11:12:28.310 回答
2

我刚刚用 PHP 5.3.6 测试了 php4delphi 7.2,但线程安全版本和扩展按预期加载。我认为只有在命令行中使用 php.exe 运行脚本时才能使用 NTS 版本,而不是在使用 IIS 时。不管怎样,我也会用 NTS 版本做测试,然后告诉你结果。

于 2011-06-15T10:36:35.767 回答
0

在我看来,PHP 本身(而不是 delphiphp)试图在内部加载一个模块并且失败了。

可能是它在 PATH to loadlibrary() 中搜索 DLL,但找到的是 64 位 DLL 而不是 32 位 DLL。最好先在 32 位 Windows 系统上尝试此设置。

PS我从“程序文件(x86)”得到的64位系统指示显然

于 2011-06-15T10:57:47.323 回答