公司要求图片存自己服务器,压缩自然不可避免,找了一个基于imagick扩展的工具包写了压缩功能,在测试服上运行完全没问题,但是到了正式服就爆了segmention fault,虽然压缩功能也都正常跑完了,这种段错误看上去就觉得不能忍,找来找去不知道原因,比较了两个服务器环境,没头绪。重新安装了扩展,也是不行,苦搜若久终于发现了一个https://stackoverflow.com/questions/8281489/segmentation-fault-running-gearman-php-from-the-command-line,里面解决的办法就是用dmesg工具。
于是也去运行了一下dmesg,出现了如下信息
php[10081]: segfault at 36d0a09bc6 ip 00000036d0a09bc6 sp 00007f0646269dc8 error 14php[10080]: segfault at 36d0a09bc6 ip 00000036d0a09bc6 sp 00007f0646c6adc8 error 14 in libfreetype.so.6.3.22[36d1a00000+98000]php[10082]: segfault at 36d0a09bc6 ip 00000036d0a09bc6 sp 00007f0645868dc8 error 14 in libfreetype.so.6.3.22[36d1a00000+98000] in libfreetype.so.6.3.22[36d1a00000+98000]php[13886]: segfault at 36d0a09bc2 ip 00000036d0a09bc2 sp 00007f1e5386adc8 error 14 in libfreetype.so.6.3.22[36d1a00000+98000]php[13888]: segfault at 36d0a09bb8 ip 00000036d0a09bb8 sp 00007f1e52468dc8 error 14php[13887]: segfault at 36d0a09bb8 ip 00000036d0a09bb8 sp 00007f1e52e69dc8 error 14 in libfreetype.so.6.3.22[36d1a00000+98000] in libfreetype.so.6.3.22[36d1a00000+98000]php[25639]: segfault at 36d0a09bc2 ip 00000036d0a09bc2 sp 00007f9077a69dc8 error 14php[25638]: segfault at 36d0a09bc2 ip 00000036d0a09bc2 sp 00007f907846adc8 error 14php[25640]: segfault at 36d0a09bc2 ip 00000036d0a09bc2 sp 00007f9077068dc8 error 14 in libfreetype.so.6.3.22[36d1a00000+98000] in libfreetype.so.6.3.22[36d1a00000+98000] in libfreetype.so.6.3.22[36d1a00000+98000]
从这些记录中可以看到关键词,libfreetype.so,然后继续搜了这个关键词,http://blog.csdn.net/haniyan/article/details/40516137尝试安装freetype
yum install gcc gcc-c++ freetype-devel glib2-devel cairo-devel
然后问题就解决了。
这里补充一下dmesg和freetype的相关知识:
dmesg: dmesg是一种程序,用于检测和控制内核环缓冲。程序用来助用户了解系统的启动信息。
freetype: FreeType库是一个完全免费(开源)的、高质量的且可移植的字体引擎,它提供统一的接口来访问多种字体格式文件,包括, , Type1, CID, , Windows FON/FNT, X11 PCF等。
所以imagick的安装是要依赖于freetype的,装的时候不要忘记装freetype。