Windows上编译PHP+Imagick

Windows上编译PHP+Imagick
PHP通过Imagick扩展来实现对图片的处理,Imagick扩展是基于ImageMagick的,但Imagick扩展不是PHP自带的,如果用户想使用它,要么寻找Windows的Binary文件,要么自己编译一个。如果在Linux上,这些都不是问题。但Windows上相关的资料少之又少。下面简单介绍一下本人的编译过程。
准备过程:
1. 下载PHP源代码和编译工具
PHP的源代码可以从www.php.net上下载,具体的下载地址可以到download页面(http://www.php.net/downloads.php)上寻找。
然后到documentation页面(http://www.php.net/docs.php)上寻找编译过程的帮助,具体页面是:http://www.php.net/manual/zh/install.windows.building.php。
可以从这个页面上下载相关的编译工具:win32build和bindlib_w32,并将他们解压缩到源代码放在同级的目录中,具体目录结构如下:
+–BuildRootDir
| |
| +–bindlib_w32
| | |
| | +–arpa
| | |
| | +–conf
| | |
| | +–…
| |
| +–php-5.x.x
| | |
| | +–build
| | |
| | +–…
| | |
| | +–win32
| | |
| | +–…
| |
| +–win32build
| | |
| | +–bin
| | |
| | +–include
| | |
| | +–lib
将win32build\bin目录添加到系统环境变量Path中,这一步也可以在编译的时候指定。此外,需要在C盘建一个目录C:\usr\local\bin,将win32build\bin\目录下的bison.simple拷贝到此目录中。
完成上述工作后,编译resolv.lib。此文件的VC工程文件位于:bindlib_w32下,可以使用VC打开工程文件然后编译即可,将编译产生的resolv.lib拷贝到win32build\lib目录下(如果此文件已存在,覆盖之)。
至此,PHP的编译准备工作已完成。
2. 下载ImageMagick安装包并安装
到ImageMagick主页(http://www.imagemagick.org/script/index.php)上下载Windows的Binary文件(http://www.imagemagick.org/script/binary-releases.php?ImageMagick=ir9ijldaeppff0fudjv4kmfcj0#windows),请选择dll版本,因为只有dll版中有development相关的文件。安装dll版本,安装过程中一定要勾选:install development headers and libraries for C and C++和Add application directory into your system path两个选项。
3. 下载Imagick源代码
到ImageMagick的Program interface页面上(http://www.imagemagick.org/script/api.php)寻找PHP接口Imagick。然后下载(http://pecl.php.net/package/imagick)并解压到php源代码目录下的ext目录中(BuildRootDir/php-5.x.x/ext/imagick)。打开imagick目录下的config.w32文件,替换imagick_read.c为imagick_file.c。此处很可能是imagick的一个Bug。切记。
4. 配置Windows
如果你的Windows系统不是英文版或者默认打开文件的编码不是English(US),编译过程很可能会fail。因此需要对Windows系统的配置稍作改动,具体为:打开控制面板,选择区域与语言,找到非Unicode程序的语言项,然后配置默认使用语言为英语(美国)/English(US)。
经过以上4步之后,终于可以进行编译了。
编译过程:
使用VC的Command Prombt进入字符界面(cmd界面),然后cd到php的目录,检查一下path,看系统path中是否包括win32build\bin目录,如果没有包含进来,需要执行:set path=BuildRootDir\win32build\bin;%path%.
然后在php的源代码目录下执行buildconf.bat文件用于产生configure.js文件。然后系统提示键入”configure –help”.此时可以直接键入configure –enable-snapshot-build –disable-zip –disable-zlib –with-imagick=shared
注意以下最后生成的报告中是否包含imagick shared这样的一行。如果有,表示configure已经成功。可以键入nmake snap进行编译了。建议使用nmake snap >build.log将编译输出重定向到一个文件中。因为编译过程太长,使用日志文件方便日后检查。
编译完成之后会有一个Release_TS目录,下面会有php-5.x.x(5.x.x是你的php版本号)和3个zip文件。
编译的最终结果就位于php-5.x.x目录中。可以将它Copy到你需要的位置使用它。
测试编译结果:
以下是phpinfo()返回的关于imagick的相关信息。

至少我低声下气得挽留过你

【一】
每个人都有一个死角,
自己走不出来,别人也闯不进去。
我把最深沉的秘密放在那里。
你不懂我,我不怪你。

【二】
每个人都有一道伤口,
或深或浅,盖上布,以为不存在。
我把最殷红的鲜血涂在那里。
你不懂我,我不怪你。

【三】
每个人都有一场爱恋,
用心、用情、用力,感动也感伤。
我把最炙热的心情藏在那里。
你不懂我,我不怪你。

【四】
每个人都有一行眼泪,
喝下的冰冷的水,酝酿成的热泪。
我把最心酸的委屈汇在那里。
你不懂我,我不怪你。

【五】
每个人都有一段告白,
忐忑、不安,却饱含真心和勇气。
我把最抒情的语言用在那里。
你不懂我,我不怪你。

【六】
你永远也看不见我最爱你的时候,
因为我只有在看不见你的时候,才最爱你。
同样,
你永远也看不见我最寂寞的时候,
因为我只有在你看不见我的时候,我才最寂寞。

【七】
也许,我太会隐藏自己的悲伤。
也许,我太会安慰自己的伤痕。
也许,你眼中的我,太会照顾自己,
所以,你从不考虑我的感受。

【八】
你以为,我可以很迅速的恢复过来,有些自私的以为。
从阴雨走到艳阳,我路过泥泞、路过风。
一路走来,你不曾懂我,我亦不曾怪你。
我不是为了显示自己的大度,
也不是为了体现自己的大方。
只想让你知道,感情不在,责备也不存在。