Linux

PHP-FPM 和 PHP 執行產生不同的結果

  • August 10, 2018

我使用帶有嵌入式php伺服器的 docker 容器進行開發。現在我們正在創建一個測試環境,我們想使用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

我必須將環境變數設置為正確的值才能使其正常工作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

引用自:https://serverfault.com/questions/925650