使用Delphi2010和php4Delphi编写PHP扩展

使用Delphi2010和php4Delphi编写PHP扩展,php,delphi,iis-7,php-extension,php4delphi,Php,Delphi,Iis 7,Php Extension,Php4delphi,首先,这是关于not(以前是delphiforphp) 使用 德尔福2010 PHP 5.3.6(VC9,NTS) php4Delphi 7.2(使用VC9指令编译) Windows Server 2008 R2 IIS 7 尝试在IIS/PHP服务器上运行php4Delphi\u math.dll示例扩展时,我在C:\Windows\Temp\PHP-errors.log文件中看到以下错误 [15-Jun-2011 17:58:42]PHP警告: PHP启动:无法加载动态 库'C:\程序文

首先,这是关于not(以前是delphiforphp)

使用

  • 德尔福2010
  • PHP 5.3.6(VC9,NTS)
  • php4Delphi 7.2(使用VC9指令编译)
  • Windows Server 2008 R2
  • IIS 7
尝试在IIS/PHP服务器上运行php4Delphi\u math.dll示例扩展时,我在C:\Windows\Temp\PHP-errors.log文件中看到以下错误

[15-Jun-2011 17:58:42]PHP警告: PHP启动:无法加载动态 库'C:\程序文件 (x86)\PHP\ext\delphi\u math.dll'- 动态链接库(DLL) 初始化例程失败。在里面 第0行未知

我已经解决了PHP找不到扩展的初始问题,因此这不是路径风格的问题


我认为PHP4Delphi7.2可能不支持最新的PHP5.3.6。有人使用过这种配置吗?

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

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

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


另外,我从“program files(x86)”中得到的64位系统指示显然

PHP试图在内部加载模块,但失败了,你是对的

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

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


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

感谢您查看有关TS/NTS版本的链接。我错误地认为NTS是传统的PHP绑定,TS是新产品。现在我知道我已经向后了,切换到TS PHP版本不会有问题。路径问题是我的第一个问题,但是我通过将PHP\ext目录添加到系统路径(并重新启动)解决了这个问题。然而,这是一个不同的问题。无论如何,谢谢你抽出时间。