PHP-FPM 和 PHP 执行产生不同的结果

PHP-FPM 和 PHP 执行产生不同的结果

我使用带有嵌入式服务器的 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

相关内容