使用 php/windows 安装 ImageMagick 扩展
Posted
技术标签:
【中文标题】使用 php/windows 安装 ImageMagick 扩展【英文标题】:Installing ImageMagick extension with php/windows 【发布时间】:2010-05-18 14:59:00 【问题描述】:在带有 IIS 的 Windows Server 2003 上运行 php 版本 5.2.5。
拥有几乎相同的服务器,我们可以在其中毫无问题地安装 ImageMagick。它运行完全相同版本的php。使用以下步骤进行安装,但它似乎无法在此服务器上运行。 ImageMagick 本身已安装,但 php 不会加载扩展。
我们花了几个小时试图安装扩展程序。它只是不会出现在 phpinfo() 中。
安装步骤
在 Windows XP (PHP 5.2.x) 上安装 IMagick
下载并安装ImageMagick-6.5.8-7 Q16-windows-dll.exe
http://www.imagemagick.org/download/binaries/ImageMagick-6.5.8-7-Q16-windows-dll.exe
从下载php_imagick_dyn-Q16.dll
http://valokuva.org/outside-blog-content/imagick-windows-builds/080709/
将 DLL 复制到 [PHP]/extension 目录并将其重命名为 php_imagick.dll
您必须编辑您的 php.ini
文件并添加新的扩展名:
extension=php_imagick.dll
保存 php.ini
并重新启动 Apache 服务器。 (如有必要,重新启动 Windows)
phpinfo()
应显示imagick
已启用。
【问题讨论】:
忘记这个蹩脚的扩展名,通过命令行使用 IM。 @YourCommonSense 以及如何在命令行上进行交互?使用shell_exec
?
你也可以在DOS提示符下运行php.exe,它会告诉你模块加载是否有问题。 c:\php> php.exe -e -v
我已经安装了dll并启用了,如何使用呢?我不知道更多。
【参考方案1】:
发现用户 Buttercup 给出的答案非常有用,如果他能更清楚的话。
我的场景是 Windows 2012 R2 x64,PHP 5.5.19 x64,需要安装带有 PHP 支持的 ImageImagick。以下几点我能够安装 ImageImagick 6.9.0 x64 和 PHP_Imagick.dll 3.1.2(两者都是当前最新的稳定版本)。
请注意,我在 NTS 和 x64 模式下下载了所有组件(PHP、ImageImagick 和 PHP_Imagick):而不是在 TS 和/或 x86 模式下。我不知道这是否适用于您自己的情况。
阅读 Buttercup(至于用户 RhoVisions)时我不清楚的一点是他的评论:“用 PHP 版本覆盖从 ImageMagick 6.8.8 Windows 版本中找到的 DLL”。
所以,这就是我所做的(基于 Buttercup 解决方案,我不得不一次又一次地说,非常感谢你!):
从Link 下载最新的 ImageMagick EXE 安装程序 在我的情况下,我下载了第一个可用的 HTTP 下载文件,标记为“Win64 dynamic at 16 bits-per-pixel”(文件名:ImageMagick-6.9.0-0-Q16-x64-dll.exe)
运行刚刚下载的安装程序。我将它安装在 C:\ImageMagick6.9.0 之类的简单路径中(但我认为将其从 Program Files 移开并不重要)。另外,在安装过程中,我没有更改任何其他参数的默认值。
从 PECL 网站下载最新的 PHP_Imagick DLL 文件:http://pecl.php.net/package/imagick 我选择了一个稳定的(不是 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) 您拥有的 x64 或 x86 版本的 PHP c) 你拥有的 NTS 或 TS 版本的 PHP 我的情况是 PHP 5.5.x、x64、NTS:所以我下载了标有“5.5 Non Thread Safe (NTS) x64”的那个(文件名:php_imagick-3.1.2-5.5-nts-vc11-x64.zip)
解压 php_imagick ZIP 并: a) 将 php_imagick.dll 文件复制到 PHP 安装的 EXT 文件夹中 b) 从您刚刚解压缩的文件夹中复制并替换所有 CORE_RL_.dll 到您在第 2 点选择的文件夹中。显然,请备份替换的文件。就我而言,我将 8 个 CORE_RL_.dll 文件从解压缩文件夹复制到 C:\ImageMagick6.9.0。我离开了 C:\ImageMagick6.9.0 其他 CORE_RL_*.dll 没有被覆盖。
编辑并保存您的 PHP.ini 文件以添加这个简单的行: extension=php_imagick.dll
重新启动您的服务器(不幸的是,我没有找到任何好的重新启动替代方法:管理员命令提示符中的 IISRESET 也不起作用)。
重启完成后,通过浏览器远程访问您的 phpinfo.php 文件,以验证 Imagick 模块是否正常。在我的情况下,它是。
希望这对你有帮助!
【讨论】:
伙计,你是我的英雄 :) 第 4b 点是我没有做的最后一件事。我花了大约 10 个小时的谷歌搜索。非常感谢!!! 这太棒了!它也适用于 Apache/PHP。我有 Apache 2.4 x86、PHP 5.6 x86、ImageMagick 7.0.3 x64 和 imagick 3.4.1 x86。【参考方案2】:我找到了另一个来源。 PECL直接下载。
安装步骤
ImageMagick 安装
在哪里下载与 IIS 8.1 / Windows 2012r2 php x64 兼容的最新 ImageMagic:
http://windows.php.net/downloads/pecl/deps/
导航和下载: ImageMagick-6.8.8-vc9-x86.zip for PHP 32-bit, 5.4.xx
ImageMagick-6.8.8-vc11-x86.zip for PHP 32-bit, 5.5.xx
ImageMagick-6.8.8-vc11-x64.zip for PHP 64-bit, 5.5.xx
提示:
用 PHP 版本覆盖从 ImageMagick 6.8.8 Windows 版本中找到的 DLL。
如果文件被锁定在内存中,您需要重新启动。
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 zip;我该怎么办?我把它放在哪里? 用 PHP 版本覆盖从 ImageMagick 6.8.8 Windows 版本中找到的 DLL。您需要下载 ImageMagic 6.8.8【参考方案3】:在windows中,当你想为php服务器添加扩展时,你应该检查3个参数:
您的 php 服务器编译时使用的编译器版本(VC9 或 VC10),在 phpinfo()
中指明。
phpinfo()
中指明的PHP扩展API号。
最重要的参数是您的网络服务器是 ts(线程安全)还是 nts(非线程安全),这在phpinfo()
中指明。
根据我的经验,我发现 IIS 默认是 nts,并且应该使用 nts php 库编译 php 扩展,以便在您的 Web 服务器中正常工作。但是,如果你想正确加载你的扩展,你的扩展和你的 php web 服务器在这三个参数上应该完全一样。
【讨论】:
【参考方案4】:这是一个较老的问题,但我之前遇到过与 PHP/IIS 类似的问题。我建议您仔细检查几件事:
使用 phpinfo 页面查看您是否正在编辑正确的 php.ini 文件,查看第一页上的“加载的 php.ini 文件”(听起来很愚蠢,我以前做过 - 有时PHP 会在自己的文件夹中查找它,有时是 C:\Windows) 还尝试在 php.ini 中启用 display_errors 为 On 和 error_reporting 为 E_ALL 并查看 phpinfo 文件的最底部是否有错误消息。通常,它至少会承认无法加载您的 DLL。【讨论】:
【参考方案5】:在http://www.imagemagick.org/download/binaries/ 和http://valokuva.org/outside-blog-content/ 上都有多个 DLL 文件:一个用于 x64,另一个用于 x86。如果您的 Windows XP 是 32 位,则需要尝试 x86 DLL。
【讨论】:
【参考方案6】:您不需要重新启动 Windows。您需要重新启动运行 PHP exe 的应用程序池。这可以通过重置 IIS 来完成(这是重置所有应用程序池的最佳选择)。或者回收运行 PHP 的应用程序池。
【讨论】:
以防万一它对任何人有帮助,我为此挣扎了好几天,无法让 ImageMagick 出现在 php_info 中。我确实完全重新启动了 IIS,但它仍然无法正常工作。最后,在遵循了我能找到的每一个建议之后,我终于通过重新启动计算机让它工作了。在某些情况下,有必要重新启动,我相信这是因为它会在您的 PATH 变量中添加一些内容。【参考方案7】:在我对 imagick 文件夹和 c:\windows\temp 设置权限之前,没有任何效果(IUSR 为 imagick 读取/执行,为 windows\temp 读取/写入/执行)。
* 我不是 100% 确定 windows\temp 需要读/写/执行,但它在我的谷歌冲浪期间某处的网站上列出 *
很确定重启部分只是为了确保 imagick 文件夹在您的系统路径目录中并显示在 phpinfo() 中,它已经在我的路径中,所以我不必在设置权限后重新启动。
【讨论】:
【参考方案8】:将 imagick 扩展与它们的基础和 PHP 版本相匹配是相当复杂的。因此,为了省去安装的麻烦,我建议使用带有 Imagick 及其扩展的服务器堆栈,例如 WPN-XM。
【讨论】:
【参考方案9】:我知道这是个老问题,但我是通过谷歌来到这里的,所以可能其他人也会。对于他们来说,这是一个最快和最简单的解决方案: https://mlocati.github.io/articles/php-windows-imagick.html
它对我有用,而且比这里大多数投票的答案要容易得多(这对我来说似乎太复杂了,比如将 imagick 安装为 cmd.com 命令 - 有什么用?)
【讨论】:
【参考方案10】:在我的情况下,Windows 重新启动(在步骤 4 中提到)起到了作用。
【讨论】:
以上是关于使用 php/windows 安装 ImageMagick 扩展的主要内容,如果未能解决你的问题,请参考以下文章