PHP(imagick)インストールメモ

サーバー更新に伴いシステム再構築したので手順をメモる。
WordPressに必須のPHPのインストールとPHPからImageMagickを使用する仕組みをインストールする。

PHPバージョン決定

PHPバージョンはなるべく最新のバージョンにしたいがphp_imagickとの関係もありそうもいかない。最初にとりあえず,「php_imagick」の最新版をダウンロードしてdllファイルのプロパティを確認する。バージョン:3.7.0 PHPバージョン:8.1 が最新のようだ。
php_imagick-3.7.0-8.1-ts-vs16-x64.zip

「php_imagick.dll」のプロパティからPHPのバージョン8.1.2を確認して同じバージョンのPHPをダウンロード。
php-8.1.2-Win32-vs16-x64.zip

PHPダウンロード

下記よりダウンロード(WordPressの対応バージョンは7.4以上必須)
VS16 x64 Thread Safe のZip版
php-8.1.2-Win32-vs16-x64.zip
PHP For Windows: Binaries and sources Releases
近いバージョンであれば動作することもあるみたい。

PHPインストール(解凍)

dドライブのProgram Filesに解凍・展開
例:D:\Program Files\php

「php_imagick.dll」コピー

ダウンロードした「php_imagick-3.7.0-8.1-ts-vs16-x64.zip」を解凍して「php_imagick.dll」をPHPのインストールフォルダー下の「ext」フォルダにコピーする。

環境変数「Path」設定

環境変数Path追加 「D:\Program Files\php」

設定(php.ini)

インストールフォルダーにある”php.ini-development” (開発用)をコピーして “php.ini” にリネーム。ちなみにデバッグ等不要なら本番環境用の”php.ini-production”を使用してphp.iniを作成。違いはメッセージ関係の設定有無で”php.ini-development” (開発用)はエラーメッセージを出力する。以下の設定値以外はデフオルトを使用。

[PHP]
;;;;;;;;;;;;;;;;;;;
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;
max_execution_time = 180   <<<タイムオーバー頻発により 30→180sec  0=無制限
max_input_time = -1   <<< -1はmax_execution_timeの値と同じ
; memory_limit >= post_max_size >= upload_max_filesize
memory_limit = 100G

;;;;;;;;;;;;;;;;;
; Data Handling ;
;;;;;;;;;;;;;;;;;
post_max_size = 100G

;;;;;;;;;;;;;;;;;;;;;;;;;
; Paths and Directories ;
;;;;;;;;;;;;;;;;;;;;;;;;;
extension_dir = "d:\Program Files\php\ext"

;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;
upload_max_filesize = 100G

;;;;;;;;;;;;;;;;;;;;;;
; Dynamic Extensions ;
;;;;;;;;;;;;;;;;;;;;;;
;以下extensionのコメントアウト
extension=curl
extension=fileinfo
extension=gd
extension=intl
extension=php_imagick.dll  <<<windowsの場合
extension=mbstring
extension=exif
extension=mysqli
extension=openssl
extension=pdo_mysql
extension=pdo_sqlite
extension=sqlite3

;;;;;;;;;;;;;;;;;;;
; Module Settings ;
;;;;;;;;;;;;;;;;;;;
date.timezone = "Asia/Tokyo"

default_charset = "UTF-8"
mbstring.language = Japanese

apacheの設定変更

apacheの設定ファイルでphp関連の設定を変更
httpd.conf   追加・変更

LoadModule php_module "d:/Program Files/php/php8apache2_4.dll"
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
AddHandler php-script .php
PHPIniDir "d:/Program Files/php"
LoadFile "d:/Program Files/php/php8ts.dll"
LoadFile "d:/Program Files/php/libssh2.dll"
LoadFile "d:/Program Files/php/nghttp2.dll"
LoadFile "d:/Program Files/php/libcrypto-1_1-x64.dll"
LoadFile "d:/Program Files/php/libssl-1_1-x64.dll"
LoadFile "d:/Program Files/php/libsqlite3.dll"

ImageMagickインストール

PHPでImageMagickを使用するには追加モジュールの「php_imagick.dll」のコンパイル時のバージョンと合わせたほうが確実な動作が期待できる。と思う。
ある程度バージョンが近い場合は動作するようなので,一か八かでインストールしてみてダメなら更新日時から近いバージョンをインストールする。
dドライブのProgram Filesにインストーラーからインストール

「Install PerlMagick for Strawberry Perl v5.20」にチェックを付けるとPerlがインストールされていないと次のエラーがインストール後に表示されるので,チェックしない。

バージョンの合ったPerlを事前にインストールする必要がある。
Perlインストール後にWindowsを再起動してからImageMagickをインストールする。Perlインストールについては別途記載する

ImageMagickバージョンについて

「php_imagick.dll」のプロパティから更新日時以前のImageMagickバージョンを検索してインストールしてみる。「更新日時:2022/01/23」
ImageMagick 64 bit (npackd.org)

下記の一覧から目的のバージョンを選択する。

7.1.0.20が更新日時以前で一番近い日時だ
「Created:Sat Jan 22 17:16:20 UTC 2022」
次の7.1.0.22は
「Created:Sun Jan 30 05:11:13 UTC 2022」で未来の日時になってしまうのでコンパイルバージョンは7.1.0.20より以前となる。

以上はバージョンを近づける方法だが,最初はバージョンを気にしないで比較的新しい「7.1.1.15」をとりあえずインストールして動作確認。info.phpでimagickが表示されたので動作している。
「Imagick compiled with ImageMagick version:ImageMagick 7.1.0-18 Q16 x64 2021-12-14」
と表示されている。このままでも動作するがimagickコンパイルバージョンと合わせたほうが確実な動作が期待できるので「ImageMagick 64 bit 7.1.0.18 (npackd.org)」をダウンロード・インストールする。
ImageMagickのバージョンは最新でも動作する。がどうなんだろう?
コンパイルバージョンと合っていない場合にApacheの起動メッセージでワーニングを吐き出すことがあるが,見かけ上問題なく動作しているように見える。バージョンが異なることでコマンド処理が変わっていると問題発生の可能性もあるのかと思う。

PHP Warning:  Version warning: Imagick was compiled against ImageMagick version 1799 but version 1795 is loaded. Imagick will run but may behave surprisingly in Unknown on line 0

バージョンが異なる例(info.php画面)
  コンパイルバージョン:7.1.0-18
  インストールバージョン:7.1.1-15

バージョンを合わせた例(info.php画面)
  コンパイルバージョン:7.1.0-18
  インストールバージョン:7.1.0-18

参考

PHP8.1.n 各バージョン

現時点でPHP 8.1に唯一対応しているimagick : php_imagick-3.7.0-8.1-ts-vs16-x64.zip
当初はPHP 8.1の最新の8.1.9でどうかと思ってインストールしたがダメだったので,PHP8.1の下記バージョンの総当たりで試すこともありかと思った。しかしファイルのプロパティを確認して8.1.2で動作したので総当たりは必要なくなった。
php-8.1.1-Win32-vs16-x64.zip
php-8.1.10-Win32-vs16-x64.zip
php-8.1.11-Win32-vs16-x64.zip
php-8.1.12-Win32-vs16-x64.zip
php-8.1.13-Win32-vs16-x64.zip
php-8.1.14-Win32-vs16-x64.zip
php-8.1.15-Win32-vs16-x64.zip
php-8.1.16-Win32-vs16-x64.zip
php-8.1.17-Win32-vs16-x64.zip
php-8.1.18-Win32-vs16-x64.zip
php-8.1.19-Win32-vs16-x64.zip
php-8.1.2-Win32-vs16-x64.zip     <<<<<< コンパイルバージョン
php-8.1.20-Win32-vs16-x64.zip
php-8.1.21-Win32-vs16-x64.zip
php-8.1.22-Win32-vs16-x64.zip
php-8.1.23-Win32-vs16-x64.zip
php-8.1.3-Win32-vs16-x64.zip
php-8.1.4-Win32-vs16-x64.zip
php-8.1.5-Win32-vs16-x64.zip
php-8.1.6-Win32-vs16-x64.zip
php-8.1.7-Win32-vs16-x64.zip
php-8.1.8-Win32-vs16-x64.zip
php-8.1.9-Win32-vs16-x64.zip

ImageMagickの相関イメージ

相互にデーターを授受するのでお互いの手順(バージョン)を合わせる必要がある。
PHP側とPerl側を一緒に合わせるのが結構難しい。
Image::Magick(PerlMagick)は特段の必要性は無いが,少し調べてみるか。