ImageMagick を使用すると、メモリ使用量とスレッドの最大数に特定の制限を設定できます。私が知る限り、これを行うには3つの方法があります。
- 「convert -limit memory 128mb original.jpg new.jpg」のようなコマンド ライン オプションを使用します。
- 「MAGICK_THREAD_LIMIT=1」などの環境変数を使用する
- 「policy.xml」構成ファイルを編集して、デフォルト値を変更します。
「convert -list resource」を使用してこれらの各メソッドをテストしたところ、機能しました。
ここで、PHP で IMagick 拡張機能を使用する必要があります。制限を設定するために使用できる関数があります。
bool Imagick::setResourceLimit (int $type, int $limit)
最初のパラメーターには、次のいずれかを使用できます。
imagick::RESOURCETYPE_AREA (integer) //equivalent of MAGICK_AREA_LIMIT
imagick::RESOURCETYPE_DISK (integer) //equivalent of MAGICK_DISK_LIMIT
imagick::RESOURCETYPE_FILE (integer) //equivalent of MAGICK_FILE_LIMIT
imagick::RESOURCETYPE_MAP (integer) //equivalent of MAGICK_MAP_LIMIT
imagick::RESOURCETYPE_MEMORY (integer) //equivalent of MAGICK_MEMORY_LIMIT
問題は、MAGICK_THREAD_LIMIT に相当するものがなく、IMagick が単に構成ファイルと環境変数を無視しているように見えることです。どうすればこれを知ることができますか? すべてのメモリ制限をゼロに設定しましたが、IMagick はメモリ不足を報告する必要がある場合でも問題なく機能します。
私は自分自身を明確にしたことを本当に願っています。問題は、IMagick を使用するときにスレッド制限を変更するにはどうすればよいかということです。
編集:「--without-threads」オプションを使用して ImageMagick をコンパイルすることにより、スレッド制限を 1 に設定することができました。:P より良い解決策が見つかるまでやらなければなりません。