无法加载imagick库

时间:2016-09-21 07:23:04

标签: php apache laravel imagick

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

  

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

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

此外,想象力显示在phpinfo()中。 enter image description here

当我使用laravel使用它时,我得到以下错误。 enter image description here

2 个答案:

答案 0 :(得分:15)

让Imagick在Windows上工作总是有点受欢迎,因为这里指出的是一个很好的指南 http://stackoverflow.com/a/36378764/1090867

但它错过了重要的一点

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

所以这是我每次需要这样做时都遵循的步骤。这适用于apache,nginx或IIS。

第1步

找出你的php版本和设置

enter image description here

您需要版本,架构,编译器和线程安全

如果禁用线程安全,则 NTS 启用, TS

第2步

安装一个imageMagick的副本它只是确保它可以覆盖你的架构,这也需要是dll.exe而不是静态版本。

关于Q8和Q16,我会留给您,但两个版本都可以使用

http://www.imagemagick.org/script/binary-releases.php#windows

我建议将安装目录名称更改为通用的名称 C:\Imagemagick因为我以前在使用PHP和Windows的te默认目录名时遇到了一些问题。

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

enter image description here

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

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

第3步

这不幸是困难的部分,可能有点反复试验。我发现以下提供了最好的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

第4步

重新启动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目录中,这通常会导致更多问题,但如果您的想法不够用,那就试试吧

答案 1 :(得分:6)

我刚遇到这个问题。只有我在命令行上使用PHP(PHP CLI)。问题是主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信息。