首先这是一个漫长的过程,尝试编译此插件的用户一定要有耐心。大致流程可以划分为:

10余年的滴道网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。营销型网站建设的优势是能够根据用户设备显示端的尺寸不同,自动调整滴道建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联从事“滴道网站设计”,“滴道网站推广”以来,每个客户项目都认真落实执行。
- 编译ImageMagick 
- 编译MagickWand 
关于PHP的版本。Windows的PHP是用哪个版本的VC编译的,这个一定要先弄清楚,例如我的是VC9编译的,那么一定要下载对应的VC来编译。例如VC9对应VS2008,VC10对应VS2010。
下面切入正题:
- 首先下载PHP的源代码,注意你下载的源代码也要跟你Windows上的PHP可执行文件是同一个版本。例如我的是5.4.31RC1。 
- 下载ImageMagick的源代码,我写这篇文章的时候最新版是ImageMagick-6.8.9 
- 下载MagickWandforPHP的源代码,我写这篇文章的时候最新版是MagickWandForPHP-1.0.9-2.zip 
 (注:以上源代码建议都从官方下载,并且如果有对应的windows版本的,都下载windows版本的。如果没有明显标记windows版本的,那么.zip格式的压缩包通常就默认是windows版本的源代码。)
- 首先编译 MagickWand 
 MagickWand的源代码目录下有一个叫做VisualMagick的目录,这里面存放了VS的工程文件。双击,升级到你所用的VS版本的解决方案,然后打开。
 第一次编译,难免会遇到错误,如果最后编译有5个或者5个以上的项目失败了,那就一定要检查,然后修改错误以后重新编译。
 我第一次编译的时候有5个项目没有编译成功,导致一些CORE开头的lib文件没能生成。正确的情况下, 应该是每一个子工程都有一个lib文件和对应的dll文件生成的。其中CORE开头的工程尤为重要。如果最后有一个IM_MOD开头的工程没有成功,那可能对后面的影响不大,可以忽略。
 一般来收,工程文件没有编译成功,可能是互相关联的,例如工程A的编译,可能需要工程B的编译出来的lib文件作为支持。我第一次编译的时候,失败原因最后发现是其中一个和多语言功能有关的模块的源文件,里面有各国语言文字,但是这个源文件编码是不带BOM的UTF8,根据微软官方的解释,在VS里面使用这种UTF8的错误是不可预知的,用MadEdit加上了BOM,问题解决,最后只剩下一个MOD工程没有编译成功,可以忽略了。
- 然后编译MagickWand 
 首先新建一个解决方案,选择win32的dll工程(空项目),然后导入MagickWand下的对应的c文件和h文件。
 加入对应的包含文件目录:
 PHP源码所在目录
 PHP源码所在目录下的Zend目录
 PHP源码所在目录下的main目录
 PHP源码所在目录下的TSRM目录
 ImageMagick源码所在目录
 ImageMagick源码所在目录下的magick目录
 加入对应的库文件目录:
 PHP可执行文件所在目录
 PHP可执行文件所在目录下的extras目录
 PHP可执行文件所在目录下的dev目录
 ImageMagick源码所在目录下的VisualMagick\Lib目录
 进入工程文件的属性,展开 C/C++ > 预处理器 栏目,在预处理器定义中加入如下内容:
 ZEND_DEBUG=0
 WIN32
 NDEBUG
 _WINDOWS
 _USRDLL
 MAGICKWAND_EXPORTS
 COMPILE_DL_MAGICKWAND
 ZEND_WIN32
 PHP_WIN32
 HAVE_MAGICKWAND=1
 LIBZEND_EXPORTS
 进入 连接器 > 输入 栏目,在附加依赖项中加入如下内容:
 odbc32.lib
 odbccp32.lib
 php5embed.lib
 CORE_RL_wand_.lib
 CORE_RL_zlib_.lib
 CORE_RL_webp_.lib
 CORE_RL_ttf_.lib
 CORE_RL_tiff_.lib
 CORE_RL_png_.lib
 CORE_RL_pixman_.lib
 CORE_RL_openjpeg_.lib
 CORE_RL_Magick++_.lib
 CORE_RL_magick_.lib
 CORE_RL_lqr_.lib
 CORE_RL_libxml_.lib
 CORE_RL_lcms_.lib
 CORE_RL_jpeg_.lib
 CORE_RL_jp2_.lib
 CORE_RL_jbig_.lib
 CORE_RL_glib_.lib
 CORE_RL_ffi_.lib
 CORE_RL_croco_.lib
 CORE_RL_cairo_.lib
 CORE_RL_bzlib_.lib.
 CORE_RL_librsvg_.lib
 此时就可以开始生成解决方案了,中间肯定会遇上错误,大概是C++的一个编译器的断点,找到对应源代码注释掉。(MagickWand for Windows万年不更新代码了,只有根据错误去一个个调整,如果遇上其他错误,解决方案也类似)
- 最后生成的dll文件就是标注PHP的扩展文件了,如何使用不再赘述。最后有几点要说明的: 
 首先是这个方法默认都是动态链接,所以最后可能需要在我们的环境变量中加入ImageMagick源码所在目录下的VisualMagick\Bin目录,也就是ImageMagick编译出来的那些Dll所在的目录,才能正确加载这个PHP扩展,当然用户在编译的时候也可以选择全静态连接。
 其次是,下载的PHP源码里,很有可能有一处宏定义:#define PHP_COMPILER_ID "VC9",如果遇上了这种情况,改成你自己的编译器版本即可,否则最后加载的时候可能会提示版本无法对接。
 最后,一定要用NTS,也就是非线程安全编译,一般来说Windows的PHP一定要用非线程安全版本。
分享文章:Windows上编译PHP的MagickWand扩展
本文URL:http://www.scyingshan.cn/article/podcgs.html

 建站
建站
 咨询
咨询 售后
售后
 建站咨询
建站咨询 
 