Win7 PHP v5.6 成功安装Imagick库

时间:2021-11-19 09:00:32

需求

项目上需要大量图片生成缩略图,抠门老板不舍得用七牛,自己实现吧,GD效率不行,用Imagick库实现。

环境

Windows 7 64位
[XAMPP2016](http://www.xampps.com/) (Apache v2.4.18 、 PHP v5.6.16 VC11 X86)
php_imagick-3.4.3-5.6-ts-vc11-x86
ImageMagick 6.9.3-0 Q16 x86

问题

按照常规把dll放到ext目录内,把CORE开头的几个DLL放到PHP主目录里。
并在php.ini里写入 extension=php_imagick.dll
重启apache,很好,完美加载。

Win7 PHP v5.6 成功安装Imagick库
桥岛麻袋!
为啥ImageMagick number of supported formats: 0

再进入CLI模式看下
Win7 PHP v5.6 成功安装Imagick库

用自带的PHP程序跑一下,果然有问题
Win7 PHP v5.6 成功安装Imagick库

不能加载模块文件是什么鬼?搜了一下 IM_MOD_RL_png_.dll 发现是在ImageMagick\modules\coders目录内,好吧,把目录里所有DLL全部复制到PHP\ext目录内,不行。

移动到上级目录吧。

Win7 PHP v5.6 成功安装Imagick库

欧耶,果然可以了,重启APACHE,这次必须妥妥的……

然而现实给了我无情一击,妈蛋。

Win7 PHP v5.6 成功安装Imagick库

真TMD奇怪,明明CLI可以加载的……

我又做了如下尝试:
1. 把ImageMagick\modules\coders里的IM*.dll放入C:\WINDOWS\SYSTEM32\内,不行。
2. 把ImageMagick\modules\coders里的DLL放入C:\WINDOWS\内,不行。
3. 把php_imagick里的CORE*.dll放入C:\WINDOWS\SYSTEM32\内,不行。
4. 把php_imagick里的CORE*.dll放入C:\WINDOWS\内,不行。

分析

后来突然想到一个问题,PHP CLI能加载说明DLL是没有问题的,问题肯定出在路径上!
先看下apache路径`"E:\xampp\apache\bin\httpd.exe" -k runservice`

在看下httpd.conf是怎么加载php的
```
# XAMPP settings
Include "conf/extra/httpd-xampp.conf"
```
在看看httpd-xampp.conf
```
#
# XAMPP settings
#
PHPIniDir "/xampp/php/"
LoadFile "/xampp/php/php5ts.dll"
LoadModule php5_module "/xampp/php/php5apache2_4.dll"
```
用的是相对路径,问题应该就是这里了。
由于是httpd调用php5apache2_4.dll,那当前运行路径肯定是E:\xampp\apache\bin\,如果要让imagick加载必须放在这里才对啊。把codes下DLL放到目录里试一下,果然。

解决

Win7 PHP v5.6 成功安装Imagick库
(箭头所指是需要注意的地方)
Win7 PHP v5.6 成功安装Imagick库
(终于见到你)

以上所有文件、库、DLL等都需要注意PHP版本、架构、TS、编译库,要选择与之对应的ImageMagick。

相关链接

http://www.xampps.com/
https://www.imagemagick.org/script/download.php
http://pecl.php.net/package/imagick
http://windows.php.net/download#php-7.1

参考文献

1. [http://www.cnblogs.com/wangqishu/p/5609950.html](http://www.cnblogs.com/wangqishu/p/5609950.html)
2. [http://www.cnblogs.com/zjhblogs/p/6125967.html](http://www.cnblogs.com/zjhblogs/p/6125967.html)