在Windows系统下安装与PHP兼容的ImageMagick扩展

15

在Windows Server 2003服务器上,运行的是PHP版本5.2.5和IIS。

我们有另外一台几乎相同的服务器,可以轻松安装ImageMagick,而且它正在运行完全相同的php版本。按照以下步骤安装,但在这台服务器上似乎无法正常工作。虽然已经安装了ImageMagick本身,但php不会加载扩展。

我们花了数小时尝试安装扩展程序,但它就是不会显示在phpinfo()中。

采取的安装步骤

在Windows XP(PHP 5.2.x)上安装IMagick:

  1. 下载并安装ImageMagick-6.5.8-7 Q16-windows-dll.exehttp://www.imagemagick.org/download/binaries/ImageMagick-6.5.8-7-Q16-windows-dll.exe

  2. http://valokuva.org/outside-blog-content/imagick-windows-builds/080709/下载php_imagick_dyn-Q16.dll

    将 DLL 复制到 [PHP]/extension 目录并将其重命名为 php_imagick.dll

  3. 必须编辑php.ini文件并添加新扩展:

    extension=php_imagick.dll
    
  4. 保存php.ini并重新启动Apache服务器。(如有必要,请重新启动Windows)

  5. phpinfo()应显示已启用imagick


3
别再使用这个无用的扩展程序了,改用命令行来进行即时通讯。 - Your Common Sense
@YourCommonSense 以及它如何在命令行上进行交互?使用 shell_exec 吗? - Shiplu Mokaddim
你也可以从 DOS 命令提示符中运行 php.exe,它会告诉你是否有任何模块加载问题。c:\php> php.exe -e -v - ProNeticas
我已经安装了dll并启用了,如何使用它?我对它不是很了解。 - Mansoorkhan Cherupuzha
10个回答

9

我发现用户Buttercup的答案非常有用,尽管他可能需要更加清晰明了。

我的情况是Windows 2012 R2 x64,PHP 5.5.19 x64,并且需要安装支持PHP的ImageImagick。按照以下步骤,我成功地安装了ImageImagick 6.9.0 x64和PHP_Imagick.dll 3.1.2(它们目前都是最新的稳定版本)。

请注意,我下载了所有组件(PHP、ImageImagick和PHP_Imagick),都是NTS和x64模式,不是TS和/或x86模式。我不知道在你自己的情况下是否适用。

对于我来说,不太清楚的一点是读Buttercup(还有RhoVisions用户)的评论:“用PHP版本覆盖从ImageMagick 6.8.8 Windows版本找到的DLL”。

所以,这是我根据Buttercup的解决方案所做的(再次感谢你,Buttercup!):

  1. 链接中下载最新的ImageMagick EXE安装程序。我下载了可用的第一个文件,标记为“Win64 dynamic at 16 bits-per-pixel”(文件名:ImageMagick-6.9.0-0-Q16-x64-dll.exe)。

  2. 运行刚刚下载的安装程序。我将其安装在简单的路径C:\ImageMagick6.9.0下(但我认为将其移动到Program Files之外并不重要)。另外,在安装期间我没有改变任何其他参数,都按默认设置进行了。

  3. 从PECL网站(http://pecl.php.net/package/imagick)下载最新的PHP_Imagick DLL文件。我选择了一个稳定版本(非Beta或RC),在我的情况下是3.1.2,单击“Windows logo”+“DLL”标签。在我的情况下,它链接到ht tp://pecl.php.net/package/imagick/3.1.2/windows。 在打开的页面上,你会发现有一个表格:你必须根据以下内容选择你的文件: a) 你拥有的PHP的版本号(在我的情况下,有支持PHP 5.3、5.4、5.5、5.6的DLL) b) 你拥有的PHP版本的x64或x86版本 c) 你拥有的PHP版本的NTS或TS版本 我的情况是PHP 5.5.x,x64,NTS:所以我下载了标记为“5.5 Non Thread Safe (NTS) x64”的文件(文件名:php_imagick-3.1.2-5.5-nts-vc11-x64.zip)。

  4. 解压缩php_imagick ZIP文件并: a) 将php_imagick.dll文件复制到PHP安装的EXT文件夹中。 b) 将从刚刚解压缩的文件夹中取出的所有CORE_RL_ .dll文件复制到第二步中选择的文件夹中,并替换掉原来的文件。当然,请备份已替换的文件。在我的情况下,我将8个CORE_RL_ .dll文件从解压后的文件夹复制到C:\ImageMagick6.9.0中。我没有覆盖其他CORE_RL_* .dll文件,它们仍然在C:\ImageMagick6.9.0中。

  5. 编辑并保存你的PHP.ini文件,添加这个简单的行: extension=php_imagick.dll

  6. 重新启动服务器(不幸的是,我没有找到任何好的替代方法:即使是管理员命令提示符中的IISRESET也无法运行)。

  7. 当重启完成后,通过浏览器远程访问你的phpinfo.php文件,以验证Imagick模块是否正常。在我的情况下,是的。

希望这能对你有所帮助!


哥们,你是我的英雄 :) 4b点是我没做的最后一件事情。我花了大约10个小时在谷歌上搜索。非常感谢你!!! - mesnicka
太棒了!它也可以在Apache/PHP上运行。我有Apache 2.4 x86,PHP 5.6 x86,ImageMagick 7.0.3 x64和imagick 3.4.1 x86。 - Warwick

4
我找到了另一种资源。PECL直接下载。
安装步骤:
ImageMagick安装
在哪里下载最新的与IIS 8.1 / Windows 2012r2 php x64兼容的ImageMagick:

http://windows.php.net/downloads/pecl/deps/

导航并下载: ImageMagick-6.8.8-vc9-x86.zip 适用于 PHP 32 位,5.4.xx ImageMagick-6.8.8-vc11-x86.zip 适用于 PHP 32 位,5.5.xx ImageMagick-6.8.8-vc11-x64.zip 适用于 PHP 64 位,5.5.xx
提示: 覆盖从 ImageMagick 6.8.8 Windows 版本中找到的 DLL 文件与 PHP 版本。 如果文件被锁定在内存中,则需要重新启动计算机。 php_imageMagick.dll 位置

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

下载适当的DLL文件。

获取最新版本的ImageMagick DLL文件,php_imagemagick.dll(非线程安全和线程安全版本均可)。

提示:

  • 如果出现 php5ts.dll 缺失的情况,则您下载了错误版本的 php_imagemagic.dll,请下载其他版本。

  • 如果您使用的是 IIS,请使用“NTS”版本 - php_imagemagick_nts.dll

  • 如果您使用的是 Apache,请使用“TS”版本 - php_imagemagick_ts.dll


我知道这个问题已经有一段时间的答案了,但是这个答案似乎很有用但又不太清楚。所以我下载了PECL压缩包,接下来该怎么做呢?我应该把它放在哪里? - Rohit
使用 PHP 版本覆盖 ImageMagick 6.8.8 Windows 版本中的 DLL。您需要下载 ImageMagick 6.8.8。 - buttercup

2
在Windows下,当您想将扩展添加到PHP服务器时,应检查三个参数:
1. 编译器版本(VC9或VC10),在phpinfo()中有标示。 2. PHP扩展API编号,也在phpinfo()中有标示。 3. 最重要的参数是您的Web服务器是ts(线程安全)还是nts(非线程安全),这也在phpinfo()中有标示。
我发现根据我的经验,IIS默认为nts,因此扩展应使用nts PHP库进行编译,以便在您的web服务器中正常工作。但是,如果您想要正确加载扩展,您的扩展和PHP Web服务器在这三个参数上必须完全相同。

1

这是一个较旧的问题,但我之前在PHP/IIS中遇到过类似的问题。以下是我可以建议您双重检查的几个事项:

  • 使用phpinfo页面查看您是否正在编辑正确的php.ini文件,在第一页上查看“Loaded php.ini file”(听起来很蠢,但我以前做过 - 有时PHP会在自己的文件夹中寻找它,有时在C:\Windows中)
  • 还可以尝试在php.ini中将display_errors设置为On,将error_reporting设置为E_ALL,并查看phpinfo文件底部是否有错误消息。通常它至少会承认无法加载您的DLL。

1

直到我设置了imagick文件夹和c:\windows\temp的权限(imagick需要IUSR读/执行权限,windows\temp需要读/写/执行权限),才使一切正常。

* 我不确定windows\temp是否需要读/写/执行权限,但在我的谷歌搜索中有一个网站列出了这个 *

我很确定重启只是为了确保imagick文件夹在系统路径目录中,并显示在phpinfo()中,因为它已经在我的路径中,所以我在设置权限后没有必要重启。


1

1
你不需要重新启动Windows,只需要重新启动运行PHP exe的应用程序池。可以通过重置IIS(这是使所有应用程序池重置的最佳选项)或重启运行PHP的应用程序池来完成此操作。

如果有人需要的话,我想提供一些帮助。我为此苦苦挣扎了好几天,但无法让ImageMagick在php_info中显示。我完全重启了IIS,但仍然无法工作。最终,在尝试了所有建议之后,我通过重新启动计算机使其正常工作。在某些情况下,由于它添加了一些内容到您的PATH变量中,因此重新启动是必要的。 - dallin

0

将Imagick扩展与其基础和PHP版本匹配起来相当复杂。因此,为了避免安装的麻烦,我建议使用一个预装Imagick及其扩展的服务器堆栈,例如WPN-XM


0

我知道这是一个老问题,但我通过谷歌来到这里,所以可能其他人也会。对于他们来说,这是最快最简单的解决方案: https://mlocati.github.io/articles/php-windows-imagick.html

它对我很有用,比这里大多数得票最高的答案要简单得多(对我来说似乎太复杂了,比如将imagick安装为cmd.com命令 - 为什么要这样做?)


-1
在我的情况下,Windows 重新启动(在第4步中提到)解决了问题。

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