ImageMagick の脆弱性 (CVE-2016-3714) に関する注意喚起 (2016/05/09)
ImageMagick本体と、それをPHPから利用するためのPECLの拡張モジュールが必要です。
PECLのモジュールは、windows.php.net - /downloads/pecl/releases/imagick/からダウンロードできます。そこでのファイル名は「php_imagick-*.*.*-PHP_VERSION-THREAD_SAFE-vc**-xPLATFORM.zip」の形式となっており、
の3点に注意して、環境にあったものを選択します。ファイルをダウンロードしたならば、そこに含まれる[php_imagick.dll]を、php.iniのextension_dirで設定されているディレクトリにコピーします。そしてphp.iniに、extension=php_imagick.dll
を追記します。
ImageMagick本体は、次のページにあるインストーラを利用するのが簡単です。これを利用すると必要なファイルがProgram Files以下にコピーされ、そこへのPATHが設定されます。
Windows Binary Release - ImageMagick: Install from Binary Distribution
またはwindows.php.net - /downloads/pecl/deps/にあるImageMagick-*.zipをダウンロードし、これのbinフォルダからCORE_RL_*.dllとIM_MOD_RL_*.dllの名前のファイルを、パスが通っている場所へコピーします。これらのファイルのうち、たとえばGIFに必要なのはIM_MOD_RL_gif_.dllです。
[Imagick] extension=php_imagick_ts.dllとします。
たとえばさくらインターネットならば、php.iniに
extension = imagick.so
を追記するだけです。基本仕様|さくらインターネット公式サポートサイト
現在では不要となっています。これを指定すると「PHP Warning: Module "imagick" is already loaded in Unknown on line 0」と警告されます。
ファイルへのアクセス時に、Fatal error: Uncaught exception 'ImagickException' with message 'UnableToOpenBlob `**.jpg': No such file or directory'のようにエラーとなることがあります。そのときには、ファイルを絶対パスで指定するようにします。
なお現在の絶対パスは、realpath()で取得できます。PHP: realpath - Manual
readImageFile()での読み込み時に、Fatal error: Uncaught exception 'ImagickException' with message 'Unable to read image from the filehandle'とエラーとなることがあります。そのときには先に文字列に読み込んでから、その文字列をreadImageBlob()に渡すようにします。PHP :: Bug #58948 :: Unable to read image from the filehandle
$data = file_get_contents( $filename ); $image = new Imagick(); $image->readImageBlob( $data );
画像からの読み込み時に「Fatal error: Uncaught exception 'ImagickException' with message 'NoDecodeDelegateForThisImageFormat `FORMAT'」とエラーとなるときには、FORMATの形式に対応したライブラリが用意されていません。そのときにはwindows.php.net - /downloads/pecl/deps/からImageMagickをダウンロードし、対応するライブラリをbinフォルダのIM_MOD_RL_*.dllからコピーします。