ローカル環境 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
へー、そうすか。
というわけで、全部アンインストールして、初めからやってみた過程のメモをば。
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からも使えました。
とりあえずここまで。
えーと、なんか書き忘れてないよなー?