Yotazo Lab.

ほぼ自分用。でも誰かの役に立つかもしれない話題

ローカル環境 Windows+IIS+PHPでImageMagickを使う

結構ハマったぜ、チキショウ・・・

何がハマったって、WindowsのコマンドからはImageMagickが使えるようになったのに、PHPからは一切使えないという状態! JPEGのようなフォーマットは使えません! みたいに怒られる・・・JPEGが使えないってどういうことよ?? ・・・ううう

見れば、phpinfo()の
ImageMagick number of supported formatsが 0 !
ImageMagick supported formats も no value !!!

だいぶ時間を取られたけど、ここらから解決への糸口を見出し、最終的にこちらの回答でなんとか解決することができました。やれやれ・・・

This is a common problem when you have downloaded a version of Imagick that was compiled against a different version of ImageMagick than the one you are trying to run it with.

Try downloading both Imagick and ImageMagick from the same place e.g.

http://windows.php.net/downloads/pecl/deps/ http://windows.php.net/downloads/pecl/releases/imagick/

php - ImageMagick number of supported formats: has showing value 0 - Stack Overflow

へー、そうすか。

というわけで、全部アンインストールして、初めからやってみた過程のメモをば。

環境

いちおう環境を

Windows7 / IIS 7.5 / PHP 5.6.24

でやりました。

ImageMagickとimagickのダウンロード

まずはImageMagickとimagickのダウンロード。おすすめの通り、同じ場所から入手しましょうかね。

http://windows.php.net/downloads/pecl/deps/
から、ImageMagick-6.9.3-7-vc11-x86.zip をダウンロード。

http://windows.php.net/downloads/pecl/releases/imagick/
の中の、3.4.2から、php_imagick-3.4.2-5.6-nts-vc11-x86.zip をダウンロードしました。

似たようなファイルがいろいろあって迷うところですが、自分の環境に合ったものを探せばいいみたいです。まー、とりあえず、phpinfo()を見ると捗ります。使っているPHPのバージョンが5.6なら、ファイル名の中に5.6とあるものを選択。PHP Extension Build の欄に API20131226,NTS,VC11 と書いてあったら、それぞれ、「nts」と「vc11」の文字がファイル名にあるものを選べばOKてな要領です。

ちなみにNTSは、Non Thread Safeで、IISの場合はNTSのほうが多く、Apache だとTSになっていることが多い・・・らしいです。

あと、64bitのWindowsでも、PHPが32bit版で動いていたらx86を選びます。こちらもphpinfo()のArchitecture の欄を確認すればわかります。

ちなみに、ImageMagickはバージョンによって脆弱性があるらしいので注意
「ImageMagick」の脆弱性、遠隔でのコード実行が可能に | トレンドマイクロ セキュリティブログ

ImageMagickのインストール

で、次
インストールといっても、zipなので解凍して手動で置くだけ。
C直下に置きました。C:\ImageMagick-6.9.3-7-vc11-x86 です。

システム環境変数にPATH追加

ImageMagickのbinへパスを通します。

今回はC直下に置いたので、C:\ImageMagick-6.9.3-7-vc11-x86\binへパスを通す感じです。

MAGICK_HOMEという名前の変数を新規で作り、パスを
C:\ImageMagick-6.9.3-7-vc11-x86\bin
とします。

次に既存のPathに
C:\ImageMagick-6.9.3-7-vc11-x86\bin
を追加(区切りは;で。他のを消さないように注意)します。

これで再起動。パスが通っているのでWindowsのcmdでconvertなんかが使えるはず!(・・・convertは使えたのでとりあえずOK!)

PHPのExtensionフォルダにimagickを追加

php.iniで指定してあるextensionディレクトリに、imagickを追加します。場所がわからないときはphpinfo()で、extension_dirの欄を見るべし。

C:\Program Files (x86)\PHP\v5.6\ext とか書いてあるはず

このextフォルダの中に、ダウンロードしたimagick(php_imagick-3.4.2-5.6-nts-vc11-x86.zip)から、php_imagick.dllを取り出して放り込みます。そして、php.iniに、下記のようにphp_imagick.dllを読み込ませる記述をします。

extension=php_imagick.dll

うちの環境だと、php.iniの一番下に[ExtensionList]としてまとめてあったので、そこに書いておきました。ここは、IIS ManagerのPHPマネージャからやってもいけそうな感じです。

DLLファイル置き換え

php_imagickから、DLLファイルをImageMagickへ移動します。

php_imagickの中にある、CORE_RL_ で始まるDLLファイル(CORE_RL_bzlib_.dllとか)を
C:\ImageMagick-6.9.3-7-vc11-x86\binの中に入れます(うちは8個だったかな? を入れました。上書きもあり)

たぶんOK

IISを再起動して、phpinfo()を見ます

imagickの欄ができていて、
ImageMagick number of supported formats: 234
ImageMagick supported formats も賑やかになりました

試しに new Imagick してもエラーは出ませんでした。

あーよかった。

Windowsのcmdからも使えました。

とりあえずここまで。
えーと、なんか書き忘れてないよなー?