致命错误:找不到类“Imagick”

3

PHP 5.3.8

WAMP 2.2.21

ImageMagick 6.6.2 Q16


致命错误:找不到类“Imagick”,无论如何都会发生。 不管我...

  1. 安装/重新安装不同版本的ImageMagick
  2. 尝试各种VC9构建的php_imagick.dll放置在'wamp\bin\php\php5.3.8\ext\'下
  3. 已更新我的php.ini,包括'extension=php_imagick.dll'
  4. 已经重启了我的电脑和WAMP... 我数不清有多少次O_o

我也在WAMP启动时遇到了这个错误

enter image description here


有趣的是,通过WAMP任务栏,php_imagick.dll出现在我的PHP扩展中

enter image description here

但在我的本地主机PHP-Loaded Extensions中没有出现:

localhost Loaded Extensions


有人有任何想法为什么会发生这种情况吗?或者有什么建议吗?


解决方案:我必须学习这种困难的方法... WAMP 2.2 x32而不是x64,ImageMagick 6.6.4 Q16最大。


你能在这台机器上找到多少个php.ini文件? - Cups
@Cups 嗯...没意识到我有两个。我要更新第二个php.ini然后回报... - Terry
注意,其中一个可能是CLI PHP ini文件,因此编辑它可能会产生意想不到的后果。让PHP向您输出它正在使用的PHP ini文件的路径:检查phpinfo()的输出到网页(在本地主机或其他任何地方)。 - Cups
@Cups 我更新了我的第二个php.ini文件,加入了'extension=php_imagick.dll',但是在WAMP启动时出现了一个新的错误...关于:...php_imagick.dll - %1不是有效的Win32应用程序。我已经上传了一张图片。 - Terry
1
@Terry:DependencyWalker 可以告诉你这个(它还可以做更多来帮助调试 DLL 地狱!)。加载 DLL 并滚动到模块列表底部;你加载的 DLL 将在最后一行。查看“CPU”列。 - Jon
显示剩余2条评论
1个回答

1

您没有加载php_imagick.dll扩展。

首先检查文件是否存在且可读。如果是,则无法加载,因为DLL本身需要其他DLL;这个错误通常不会被Windows显示。您需要使用DEPENDS等工具来加载php_imagick.dll并查看它包含的未解决的外部引用。

您可能会发现一些函数被库(例如libeay32.dll)导入,这些库可能与您没有加载的扩展相关联,或者位于PHP目录中但应该已复制到Windows的SYSTEM目录中,或者可能使用不同的VC运行时(例如MSVCR90.DLL)。

例如,我找到的一个示例PHP 5.3 php_imagick.dll最终依赖于这两个DLL。

CORE_RL_WAND_.DLL
CORE_RL_MAGICK_.DLL

你猜怎么着,CORE_RL_MAGICK 本身也依赖于其他符号,这就解释了这个人遇到的问题(他的解决方案可能有点过头了,但是嘿,无论怎样都可以解决——它可能也适用于你,但请继续阅读)

ImageMagick - "CORE_RL_magick_.dll not found" or how to install RMagick on windows with ruby 1.9.2

再次使用DEPENDS查看CORE_RL_MAGICK,发现它依赖于特定版本的Visual C++ Runtime(对于某些版本的IM还需要QT),这将其与“VC6 vs VC9”的丑陋混乱联系在一起(例如http://www.websiteadministrator.com.au/articles/install_guides/installing_php533_pg2.html)。

现在,应该怎么做?这要看情况。字面上来说,不要盲目地随意重新安装直到星星再次对齐(它可能会起作用,通常确实如此!),我会启动 imagick DLL 上的 DEPENDS,然后是 ImageMagick 核心 DLL,以此类推,直到我找到了 Windows 应该告诉你但没有告诉你的迷宫般的依赖关系。

(这就是为什么它被称为“DLL 地狱”)。


php_imagick.dll已经存在并且可读,我甚至进行了双重检查 ;) 我非常确定它不需要任何其他的.dll文件来运行。我可能是错的,但我已经阅读了所有的教程和论坛帖子,并没有提到任何其他的.dll文件或将php_imagick.dll放在PHP扩展文件夹之外的地方... - Terry
那可能是我得到过的最有用的答案。永远。 - Terry
@Iserni 感谢帮助!顺便说一句,这是我第一次做这种东西,“DLL地狱”简直是轻描淡写。 - Terry
不用谢。您可能还想阅读维基百科上的“DLL Hell”条目,或者Joel on Software的讨论(http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixPost=2899)。 - LSerni

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