我使用带有嵌入式服务器的 docker 容器php
进行开发。现在我们正在创建一个测试环境,我们想要使用php-fpm
。一切顺利,整个过程按预期运行,但有一个区别 - ImageMagick。
php
从嵌入式服务器执行相同的命令并php-fpm
产生不同的结果:
当使用嵌入式服务器转换图像时,它工作正常,但是当使用时php-fpm
,我得到:
convert: no decode delegate for this image format `PNG' @ error/constitute.c/ReadImage/504.
convert: no images defined `-' @ error/convert.c/ConvertImageCommand/3258.
这确实令人沮丧,因为它是相同的容器、相同的php
安装、相同的 php.ini。
编辑:使用的命令:
shell_exec("/usr/bin/convert -thumbnail "50x50+0+0" /app/assets/uploads/super_e55d4fbf182b582f5bb1_bottle05.png -");
EDIT2:我尝试执行一些“简单”的事情,这里是输出:
shell_exec("/usr/bin/identify");
Version: ImageMagick 6.9.7-4 Q16 x86_64 20170114 http://www.imagemagick.org[...]
shell_exec("ls /app/assets/uploads/super_e55d4fbf182b582f5bb1_bottle05.png");
/app/assets/uploads/super_e55d4fbf182b582f5bb1_bottle05.png
shell_exec("/usr/bin/identify /app/assets/uploads/super_e55d4fbf182b582f5bb1_bottle05.png");
null
编辑3:
shell_exec("/usr/bin/identify /app/assets/uploads/super_e55d4fbf182b582f5bb1_bottle05.png 2>&1");
identify-im6.q16: no decode delegate for this image format `PNG' @ error/constitute.c/ReadImage/504.
在 shell 中直接执行:
/usr/bin/identify /app/assets/uploads/super_e55d4fbf182b582f5bb1_bottle05.png 2>&1
/app/assets/uploads/super_e55d4fbf182b582f5bb1_bottle05.png PNG 520x1020 520x1020+0+0 8-bit sRGB 319KB 0.010u 0:00.009
答案1
我必须将环境变量设置为正确的值才能使其正常工作shell_exec()
。这些变量未在 shell 中设置。
MAGICK_HOME
MAGICK_CONFIGURE_PATH
MAGICK_CODER_MODULE_PATH
就我而言:
MAGICK_HOME=/usr/lib/x86_64-linux-gnu/ImageMagick-6.9.7/
MAGICK_CONFIGURE_PATH=/etc/ImageMagick/
MAGICK_CODER_MODULE_PATH=/usr/lib/x86_64-linux-gnu/ImageMagick-6.9.7/modules-Q16/coders
我已经确保我的容器将始终获得这个特定版本的图像魔法,以免将来感到惊讶,就我的情况而言:
RUN apt-get install -y imagemagick=8:6.9.7.4+dfsg-11+deb9u5