質問

非常に奇妙なバグがありますが、まだ解決策を見つけていません。 更新以下の解決策を参照

私がやろうとしているのは、フルサイズの画像を160x120のサムネイルに変換することです。任意のサイズのjpgおよびjpegファイルでうまく機能しますが、pngでは機能しません。

ImageMagickコマンド:

/opt/local/bin/convert '/WEBSERVER/images/img_0003-192-10.png' -thumbnail x320 -resize '320x<' -resize 50% -gravity center -crop 160x120+0+0 +repage -quality 91 '/WEBSERVER/thumbs/small_img_0003-192-10.png'

PHP関数(短縮)

...
$cmd = "/opt/local/bin/convert '/WEBSERVER/images/img_0003-192-10.png' -thumbnail x320 -resize '320x<' -resize 50% -gravity center -crop 160x120+0+0 +repage -quality 91 '/WEBSERVER/thumbs/small_img_0003-192-10.png'";
exec($cmd, $output, $retval);
$errors += $retval;
if ($errors > 0) {
    die(print_r($output));
}

この関数を実行すると$ retvalが1になり、変換コマンドが失敗したことを示します(サムネイルは作成されません)。

ここで興味深いのは、シェルでまったく同じコマンドを実行すると動作することです。

wedbook:~ wedix$ /opt/local/bin/convert '/WEBSERVER/images/img_0003-192-10.png' -thumbnail x320 -resize '320x<' -resize 50% -gravity center -crop 160x120+0+0 +repage -quality 91 '/WEBSERVER/thumbs/small_img_0003-192-10.png'
wedbook:~ wedix$ 

システム、パススルーなどの異なるPHP関数を使用しようとしましたが、機能しませんでした。ここの誰かが解決策を知っているかもしれないと思った。

使用しています

  1. MAMP 1.7.2
    • Apache / 2.0.59
    • PHP / 5.2.6

ありがとう!

更新

次の依存関係を更新しました

  1. 1.2.35から1.2.37のlibpng
  2. libiconvの1.12_2から1.13_0
  3. ImageMagick 6.5.2-4_1から6.5.2-9_0

ただし、問題は解決しませんでした。

2回目の更新

ようやく役立つ可能性のあるものが見つかりました。関数を実行すると、Apacheログに出力されます:

dyld: Library not loaded: /opt/local/lib/libiconv.2.dylib
  Referenced from: /opt/local/bin/convert
  Reason: Incompatible library version: convert requires version 8.0.0 or later, but libiconv.2.dylib provides version 7.0.0

3回目の更新

libiconv.2.dylibはバージョン8.0.0 ...

bash-3.2$ otool -L /opt/local/lib/libiconv.2.dylib 
/opt/local/lib/libiconv.2.dylib:
    /opt/local/lib/libiconv.2.dylib (compatibility version 8.0.0, current version 8.0.0)
    /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.4)

4回目の更新

問題はMAMPに関連していました。以下の解決策を参照してください

役に立ちましたか?

解決

解決しました!

環境変数 DYLD_LIBRARY_PATH が正しく設定されていなかったことが判明しました。

Mac OS X Leopardにはlibiconv 7.0.0が付属していますが、変換には8.0.0が必要です(上記の2回目の更新を参照)

bash-3.2$ otool -L /usr/lib/libiconv.2.dylib 
/usr/lib/libiconv.2.dylib:
    /usr/lib/libiconv.2.dylib (compatibility version 7.0.0, current version 7.0.0)
    /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.1)

ImageMagickとすべての依存関係は、MacPortsの / opt / local の下にインストールされました。これには、パス/ opt / local / libを DYLD_LIBRARY_PATH に手動で追加する必要があります。

Mac OS X Leopardの apachectl envvarsファイル /で DYLD_LIBRARY_PATH にパス / opt / local / lib を追加した場合usr / sbin / envvars は機能しません。どうして? Mac OS X LeopardのApacheを使用していないため、MAMPを使用しています。

MAMP 独自の apachectlスクリプト独自の envvarsファイル。

パス / opt / local / lib をMAMP apachectl envvarsファイル / Applications / MAMP /の DYLD_LIBRARY_PATH に追加しましたLibrary / bin / envvars

DYLD_LIBRARY_PATH="/opt/local/lib:/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"

PNGサムネイルが生成されるようになり、Apacheエラーログにエラーが生成されなくなりました!

これが誰かの助けになり、次回は助けを求める前にすべてのログファイルをチェックすることを忘れないでください!

フィル

他のヒント

私のパスは/ opt / local / binでしたが、それをDYLD_LIBRARY_PATHに追加しても機能しませんでした。最後に、単なるole PATHを変更すると、PHP経由で機能しました。

;機能しませんでした...

; DYLD_LIBRARY_PATH =&quot; / opt / local / bin:/ Applications / MAMP / Library / lib:$ DYLD_LIBRARY_PATH&quot;

; export DYLD_LIBRARY_PATH

;これは動作します!

export PATH =&quot; $ PATH:/ opt / local / bin&quot;

PHPコードを実行しているユーザーがファイルとディレクトリに対して同じ権限を持っていることを確認してください。

これらは明白なはずですが、PHPセーフモード、open_basedirなど、および exec が無効になっているかどうかを確認してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top