WindowsのPHPでImageMagick(iMagick)を使う

WindowsでPHPを扱うとき、だいたいのことは php.ini でいけます。

php.ini だけではダメなときもあります。

その1つがImageMagickです。

ということでセットアップしていきましょう。

弊社では、2000年台前半頃からPHPを触っている関係で、古いシステムでも解析して扱うことができます。当時の担当者とか制作会社がいなくなったなどで困られた方からの相談を頂くことがよくあります。お気軽にお問い合わせください。

特徴

  • Windows10
  • 複数バージョンの共存

特定バージョンでの開発や動作確認など開発環境での用途を目的としています。

環境

作業日2022-04-04
OSWindows10  64bit

インストール対象のPHP

今回はこちらでインストールしたPHP8.0.17で使っていきます。

php-8.0.17-Win32-vs16-x64
▲こちらです。

公式の手順

https://www.php.net/manual/ja/imagick.installation.php

こちらです。基本的に本ページの内容と同じです。

ダウンロード

公式サイトから取得

「公式から」ってことなんですが、ここでは「PHPの公式から」です。

ダウンロードページは▼です。
https://windows.php.net/downloads/pecl/deps/

いっぱい出てきますが、2022年4月4日時点では次のようになっています。
CTRL + F で「ImageMagick」で検索するとスグです。

PHPに合わせて「〇〇-vs16-x64」のやつを・・・と言いたいのですが、無いですね。
なので「〇〇-vc15-x64.zip」にします。

ちなみに、vs16 とか vc15 はコンパイルしたバージョンで、「x64」は64bit版、「x86」は32bit版です。

古いバージョンが欲しい

古いバージョンが欲しいときは一番上の「archives」にあります。

archivesに入って、CTRL + F で「ImageMagick」で検索してください。

インストール

場所はどこでもOKなので
フォルダを作って中身を解凍してコピー
です。

私の場合は下図のように、zip と同じ名前でフォルダを作ってその中にいれています。

6.9.3 はかなりだいぶ前に入れたものですが、このように複数バージョンを扱えるようにします。

ちなみに環境をDoropboxに作っておくと、バックアップになるしで便利です。
ちなみのちなみですが、Doropbox に入れるのはいわゆる本体だけで、データファイルやログファイルなどはDropboxの外のフォルダを指定しています。

コマンドから呼べるようにする

私はやりませんので、必要ない方は読み飛ばしてください。

  1. Windowsキー + X
  2. 上から4番目の「システム」
  3. 右の「関連設定」にある「システムの詳細設定」
  4. 環境変数
  5. システム環境変数
  6. Path をダブルクリック
  7. 「新規」
  8. 「〇〇〇〇\ImageMagick-7.1.0-18-vc15-x64\bin」
    ※ bin までのフルパスを入れる
  9. OK
  10. OK
  11. Windows の再起動
  12. Windowsキー + R
  13. cmd を入力しEnter

これでコマンドから使えるようになります。

PHPから使えるようにする

ここまででImageMagickを単体で使えるようになっただけです。
ここからはPHPで使えるようにしていきます。

PECL のダウンロード

こちらも公式から取得します。

ダウンロードページは▼こちらです。
https://windows.php.net/downloads/pecl/releases/imagick/

とりあえずは現時点で最新の 3.7.0rc1 をインストールすることにします。

【2022-12-29 訂正】上記ページから「3.7.0rc1」でなく「3.7.0」を開きます。

いろいろ出てくるのですが、選び方のポイントがあります。

ts / nts
Thread Safe か Non Thread Safe か?という意味です。
PHPをダウンロードするときに選択したと思いますが、同じほうを選びます。
例えば PHP 8.0.17 ならこちらです。

vc15 / vs16 / x64 / x86
これらも同じでPHPに合わせます。

ということで今回は ts-vs16-x64 を選択することになります。

php_imagick-3.7.0rc1-8.0-ts-vs16-x64.zip

php_imagick-3.7.0-【PHPバージョン】-ts-vs16-x64.zip

▲こちらのように目的のPHPバージョンにあったものをクリックします。

PHP8.1系(8.1.5、8.1.12で確認)には対応していないようです。
【2022-12-29 訂正】PHP8.1系の場合は「3.7.0rc1」でなく「3.7.0」のほうに入っています。
php_imagick-3.7.0-8.1-ts-vs16-x64.zip

▲をダウンロードします。

PECL のインストール

場所はどこでも良いのでインストール先にとしたい場所にフォルダを作って解凍します。

私の場合は、下図のように zip の名前でフォルダを作ってその中に解凍しています。

php_imagick.dll の配置

php_imagick.dll は、上記、解凍したフォルダの中にあります。

php_imagick.dll をPHPの ext の中に入れます。
▼のような感じです。

今回は php-8.0.17-Win32-vs16-x64 にだけ入れることにします。

他のPHPバージョンに入れることも出来ますが ts-vs16-x64 の部分が一致するものにしたほうが良いです。

php.ini に追記

php.ini の末尾に下記を加えます。

[ImageMagick]
extension=php_imagick.dll

httpd の conf に設定追加

上のほうで、環境変数に追加した場合は下記 Path を省略できます。
また MAGICK_CONFIGURE_PATH もシステムの環境変数に入れちゃうこともできます。
できますし、おそらくほとんどの説明で「環境変数に入れましょう」となっていることと思います。

でも、しません。

複数バージョンの同居をテーマにやっているのに、環境変数への設定が必要になると複数バージョンの同居はできなくなります。

ということで、ここで行うのは環境変数の設定です。

PATH
MAGICK_CONFIGURE_PATH

この2つが必要になります。

いきなり答えですが、次のように conf を設定します。

<VirtualHost *:443>
    DocumentRoot "〇〇〇〇/public_html"
    ServerName  〇〇〇〇.jp
    FcgidInitialEnv PATH E:\〇〇〇〇\ImageMagick-7.1.0-18-vc15-x64\bin
    FcgidInitialEnv MAGICK_CONFIGURE_PATH E:\〇〇〇〇\php_imagick-3.7.0rc1-8.0-ts-vs16-x64
    ~~~~ 途中省略 ~~~~
</VirtualHost>

VirtualHost の中に入れることで影響範囲を限定しています。

ちなみに環境変数を設定していない場合は、imagick を設定していないのと同じ状態になります。

FcgidInitialEnv は htaccessには書けません。

確認

ということで、APACHE を再起動して phpinfo() です。

Environment では、 PATH と MAGICK_CONFIGURE_PATH が確認できます。
これらが正しければ imagick が表示されます。