PHP启动:无法加载动态库。

7

我正在尝试使用Firebird 2.5.2.26539,配合以下环境使用:

  • Windows 8
  • Apache 2.2.22
  • PHP 5.4.10

当我在php中启用firebird扩展时:

- extension=php_interbase.dll
- extension=php_pdo_firebird.dll

我遇到了以下错误:

[26-Dec-2012 12:08:11 UTC] PHP Warning: PHP启动:无法加载动态库'C:\Program Files (x86)\PHP\ext\php_interbase.dll' - 找不到指定的模块。 在未知行上。

[26-Dec-2012 12:08:13 UTC] PHP Warning: PHP启动:无法加载动态库'C:\Program Files (x86)\PHP\ext\php_pdo_firebird.dll' - 找不到指定的模块。 在未知行上。

如果我在命令行中运行PHP -a,则错误消息会有所不同:找不到fbclient.dll。

我正在运行flamerobin并且它打开了数据库。因此,我将fbclient.dll复制到PHP根路径。然后错误变为:

[26-Dec-2012 11:55:46 UTC] PHP Warning: PHP启动:无法加载动态库'C:\Program Files (x86)\PHP\ext\php_interbase.dll' - %1不是有效的Win32应用程序。 在未知行上。

[26-Dec-2012 11:55:46 UTC] PHP Warning: PHP启动:无法加载动态库'C:\Program Files (x86)\PHP\ext\php_pdo_firebird.dll' - %1不是有效的Win32应用程序。 在未知行上。

有人能帮我解决这个问题吗?我怀疑这个Firebird版本仍然没有为PHP制作正确的扩展。

谢谢。

你确定你没有使用64位的Apache/PHP,而是32位的Firebird(或者反之亦然)吗? - ain
尝试将这三个文件复制到 c:\windows\system32\ 或 apache 位目录中。 - newman
3个回答

6

我重复Nenhum Pois é的评论(一些人可能会错过),因为这是问题的真正解决方案:

问题在于来自FB 64位安装的fbclient.dll。我只需从32位获取fbclient.dll,将其复制到PHP根目录中即可解决该问题


2
CLI模式和Apache PHP以两个不同的配置文件运行。这就解释了在CLI模式下缺少错误消息的原因。很可能是该应用程序的扩展没有存储在PHP扩展文件夹中。我对Windows下的配置不熟悉,因此您可能需要在Google上寻找Windows PHP扩展目录,并确保您的扩展文件位于那里。
根据您的错误,路径应为"C:\Program files(x86)\PHP\ext\"。在尝试加载它们之前,请确保您的扩展文件已经存在那里。

将新的dll文件移动到扩展文件夹可能会在扩展执行之前引起新的错误,因此错误的出现已经改变 :) - Dan Belden
1
你好,在Windows系统中,CLI和Apache PHP模式共用同一个ini文件。此外,我在ext目录下也有pdo_firebird和firebird扩展。但问题是不同的。 - Nenhum Pois é
8
问题出在安装了64位的Firebird后fbclient.dll文件。我只需获取32位版本的fbclient.dll,将其复制到PHP根目录中即可解决问题。 - Nenhum Pois é
我遇到了类似的问题:我更改了php目录的路径以切换默认的php版本。这导致fbclient.dll在新的PATH目录中被搜索,而不是在Apache运行php的php目录中。即使extension_dir似乎是正确的,但php_interbase.dll仍然没有选择其父文件夹中的fbclient.dll,而是选择了PATH中的那个。 - terraloader

0

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