【问题标题】:Fatal error: Class 'Imagick' not found致命错误:未找到“Imagick”类
【发布时间】:2012-10-14 08:43:04
【问题描述】:

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 启动时也收到此错误


有趣的是 php_imagick.dll 通过 WAMP 任务栏显示在我的 PHP 扩展中

但不在我的本地主机 PHP 加载扩展中:


有没有人知道为什么会这样?或者有什么建议?


解决方案:我必须努力学习... WAMP 2.2 x32 而不是 x64,ImageMagick 6.6.4 Q16 最好。

【问题讨论】:

  • 你能在这台机器上找到多少个 php.ini 文件?
  • @Cups 嗯.. 没有意识到我有 2 个。我要更新第二个 php.ini 并报告回来......
  • 当心,一个可能是 CLI PHP ini 文件,因此编辑可能会产生意想不到的后果。让 PHP 向您输出它正在使用的 PHP ini 文件的路径:检查 phpinfo() 到网页(在本地主机或其他任何地方)的输出。
  • 此类错误的常见问题是缺少 imagick 的依赖项之一(它有吗?不知道)或者 imagick 和/或依赖项之一与您的 PHP 不二进制兼容(例如 32 与 64 位编译)。
  • @Terry: DependencyWalker 可以告诉你这一点(它可以做更多的事情来帮助调试 DLL 地狱!)。加载 DLL 并滚动到模块列表的底部;您加载的 DLL 将位于最后一行。查看“CPU”列。

标签: php imagemagick wamp


【解决方案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++ 运行时(对于某些版本的 IM,QT 也是如此),这与被称为“VC6 对抗 VC9”的丑陋蠕虫有关(例如http://www.websiteadministrator.com.au/articles/install_guides/installing_php533_pg2.html)。

现在,应该怎么做?它取决于。字面上地;因为不是盲目地随机重新安装直到星星是正确的(再次:它可能工作。它经常这样做!),我会在imagick DLL上启动DEPENDS,然后在ImageMagick核心DLL上启动,依此类推,直到我找到了 Windows 应该告诉你但没有告诉你的曲折小依赖的迷宫。

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

【讨论】:

  • php_imagick.dll 在那里并且可读,我什至仔细检查了;)我很确定它不需要任何其他 .dll 来运行。我可能是错的,但我已经阅读了所有教程并在论坛条目后阅读了论坛条目,并且从未提及任何其他 .dll 或将 php_imagick.dll 放置在我的 PHP 扩展文件夹之外的任何其他位置......
  • 这可能是我得到的最有用的答案。永远。
  • @Iserni 感谢您的帮助!附言。这是我第一次做这种事情,“DLL Hell”是轻描淡写的。
  • 不客气。您可能还想阅读 Wikipedia 上的“DLL Hell”条目,或有关软件的 Joel 讨论 (discuss.fogcreek.com/joelonsoftware/…)。
猜你喜欢
  • 2014-05-26
  • 2017-04-23
  • 2014-08-11
  • 2017-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多