【问题标题】:Cannot load imagick library无法加载 imagick 库
【发布时间】:2017-01-29 07:32:38
【问题描述】:

我已经从 here (ImageMagick-7.0.3-1-Q16-x64-dll) 安装了 imagick,从 here 安装了 dll(TS 32 位)。并且还将CORE_RL_* 复制到C:\xampp\apache\bin 但是当我运行laravel 服务器时仍然出现以下错误。

错误:警告:PHP 启动:无法加载动态库 'C:\xampp\php\ext\php_imagick.dll' - 找不到指定的模块。 在第 0 行的未知中

另外,我把 dll 文件放在了C:\xampp\php\ext\php_imagick.dll

此外,imagick 显示在phpinfo() 中。

当我使用 laravel 使用它时,出现以下错误。

【问题讨论】:

  • C:\xampp\php\ext\php_imagick.dll 真的存在吗?
  • 是的,它就在那里。
  • 我从来没有在windows上安装过,不能直接帮你。无论如何,我知道它需要一些时间才能使其正常工作,请尝试按照这些说明进行操作stackoverflow.com/a/36378764/1090867
  • @phaberest 我点击了你提到的链接,但我仍然遇到同样的错误。警告:PHP 启动:无法加载动态库 'C:\xampp\php\ext\php_imagick.dll' - 找不到指定的模块。在第 0 行的未知中
  • 你为什么不将 Laravel Homestead 与 vagrant 一起使用,而不是疯狂地尝试使用 Windows 作为测试环境?

标签: php apache laravel imagick


【解决方案1】:

让 Imagick 在 Windows 上工作总是有点失败,正如这里指出的那样,这是一个很好的指南 http://stackoverflow.com/a/36378764/1090867

但它忽略了一个重要的点

您不需要将二进制文件放入 PHP 文件夹中!

以下是我每次需要执行此操作时都会遵循的步骤。这应该适用于 apache、nginx 或 IIS。

步骤 1

找出你的php版本和设置

你需要版本、架构、编译器和线程安全

如果线程安全被禁用,这是 NTS 启用它会 TS

第二步

获取一个 imageMagick 的安装副本,确保它与您的架构相匹配,这也需要是 dll.exe 而不是静态版本。

关于 Q8 和 Q16,我将把它留给你,但两个版本都可以工作

Link

我建议将安装目录名称更改为通用名称 C:\Imagemagick 因为我过去在 PHP 和 windows 的默认目录名称方面遇到了一些问题。

只需安装,但请确保勾选添加应用程序路径,我通常也会勾选旧版实用程序。

安装后,转到您的环境变量并确保它确实在路径中。 无需将任何内容复制到您的 php 文件夹中

只是为了确保一切正常,打开命令行并输入 convert --version 你应该得到一个响应

第三步

不幸的是,这很困难,可能需要反复试验。我发现以下提供了最好的 php_imagick.dll,它似乎在 10 次中可以工作 9 次

http://www.peewit.fr/imagick/

只需选择与您的安装相匹配的版本即可。

如果这不起作用,请访问 php.net 并尝试每个版本,直到有一个版本起作用...(最晚开始)

http://windows.php.net/downloads/pecl/releases/imagick/

一旦你有一个 php_imagick.dll 把它放到你的 php/ext/ 文件夹中

找到你的php.ini文件到底部(或任何你的扩展名)并添加extension=php_imagick.dll

第四步

重新启动 PHP(或您的计算机),如果不尝试不同的 php_imagick.dll 并重复,它应该可以工作。

如果上述方法不起作用

然后尝试一个稍旧的imagick版本,我通常使用版本6.8.6-8 Q16。

请注意,我只在 Windows 7 和 Windows Server 2008、2008 R2、2012 和 2012 R2 所有 x64 和 x86 php 上真正做到了这一点

如果这仍然不起作用,那么您可能需要将 CORE_RL 文件复制到您的 imagick 目录中,这通常会导致更多问题,但如果您没有想法,那就试试吧

【讨论】:

  • 你的最后一句话对我有用...将 CORE_RL 文件从带有 php_imagick.dll 的存档中直接复制到 imgagick 安装文件夹中。但是,没有必要覆盖现有的 DLL,只需添加缺少的 DLL。
  • O|O:增强教程:ourcodeworld.com/articles/read/349/…。测试于:XAMPP 版本 7.1.1、Php 7.1.1、Windows 10 Pro、ImageMagick 6.9.3-7-vc14-x86.zip
  • 是的,最后一句也一样!
  • 这需要更多的可见性。谢谢。
【解决方案2】:

我刚刚遇到了这个问题。只有我在命令行(PHP CLI)上使用 PHP。问题是主 php_imagick.dll 文件具有的依赖关系。 PHP 将尝试加载扩展,但由于 Windows 找不到 CORE_RL_ DLL,扩展将无法加载,并且将出现有关无法加载 DLL 的错误/警告消息。它有助于了解 Windows 如何加载 DLL:

https://msdn.microsoft.com/en-us/library/windows/desktop/ms682586(v=vs.85).aspx

这很复杂,但您可以看到 Apache /bin 目录技巧适用于 Apache 的原因是 httpd.exe 位于该目录中。但是,使用 PHP CLI 时,DLL 需要位于与 php.exe 相同的目录中。

如果您不希望重复的 DLL 到处乱跑,请将包含 php.exe 的目录添加到系统 PATH 中,然后将所有 CORE_RL_ DLL 放在那里。 PATH 是最后搜索的内容,但它会正常工作。如果您不希望系统 PATH 中有虚假条目,则仅在 Apache 启动期间设置额外的 PATH 信息。

【讨论】:

  • 谢谢,我发现这个答案更直接。 WinNMP 需要包含 php.exe 的文件夹中的所有 .dll 和 .pdb 才能使 imagick 工作。然后将 php_imagick.dll 放入 /ext。经常检查php日志,他们会给你线索。
  • 这很有帮助
猜你喜欢
  • 2019-04-03
  • 2020-02-25
  • 2014-06-11
  • 2012-09-29
  • 2021-09-30
  • 2023-03-18
  • 2016-08-15
  • 2013-04-27
  • 1970-01-01
相关资源
最近更新 更多