PHPでPDF→jpg変換を行う環境を構築する(CentOS8+Apache+PHP74+ImageMagick+imagick)

この記事を試してみたくて、適当な端末で環境を作ってみることにしました。

基本的にはこの手順でCentOS8をインストールしました。

ただしマシンのせいなのかインストールタイプを選ぶ画面が出ず、デスクトップ画面付きのPCとしての構成でインストールされた模様(インストール完了後、デスクトップUIが表示されたため)。

ちなみにPHPは7.4.4になりました。

このマシンで、10.のMySQL以外を設定した状態まで持って行きました。

1. ホスト名変更

# nmtui

ホスト名: pulldullfull.example.com

PDFでそれっぽいホスト名を付けようと思ったら何故かこんな名前を思い付いてしまいました……(WordPressプラグインの「PubSubHubbub」のようなネーミングを最初に思い付いたため)。

2. 仮想サイト作成

仮想サイトの名前はホスト名から連想で仮にkullにしようかと思ったのですが、思っていたクルはkurだったのでここではそのままkurと仮定します。

# cd /var/www/
# mkdir kur
# mkdir kur/web
  • アドレス: 全てのアドレス
  • ポート: 80
  • ドキュメントのルート: /var/www/kur/web
  • サーバ名: kur.example.com
  • 仮想サーバの追加: 選択したファイル: /etc/httpd/conf.d/kur.conf
  • ディレクティブのコピー元: どこにもない

ディレクティブを以下のように編集。

#Options None ##コメントアウト

## 以下を追加

AllowOverride All
Options FollowSymLinks

手元のWindowsマシンでhostsファイル編集。

XXX.XXX.XXX.XXX    kur.example.com #PDF→jpg変換サーバ

これでサイトにアクセスできることを確認。

3. FTPユーザ作成

kurなのでkigalにします。

# useradd kigal
# passwd kigal
ユーザー kigal のパスワードを変更。
新しいパスワード:
新しいパスワードを再入力してください:
passwd: すべての認証トークンが正しく更新できました。

ユーザ追加。

# vi /etc/vsftpd/user_list

## 末尾に追加したユーザを追記

kigal


# mkdir /etc/vsftpd/user_conf
# vi /etc/vsftpd/user_conf/kigal

## 以下の1行を記述

local_root=/var/www/kur/

権限設定。

# chown apache:kigal -R kur/web/
# chmod 775 kur/web/

FTPアクセス、遡れないこと、web下にアップロードできることを確認。

4. ImageMagick, GhostScript導入 (※ImageMagickは入れ直す)

ここからが今回の本題です。

# dnf list available | grep ImageMagick
ImageMagick.x86_64                                        1:6.9.11.1-1.el8.remi                            remi
ImageMagick-c++.x86_64                                    1:6.9.11.1-1.el8.remi                            remi
ImageMagick-c++-devel.x86_64                              1:6.9.11.1-1.el8.remi                            remi
ImageMagick-devel.x86_64                                  1:6.9.11.1-1.el8.remi                            remi
ImageMagick-djvu.x86_64                                   1:6.9.11.1-1.el8.remi                            remi
ImageMagick-doc.x86_64                                    1:6.9.11.1-1.el8.remi                            remi
ImageMagick-heic.x86_64                                   1:6.9.11.1-1.el8.remi                            remi
ImageMagick-libs.x86_64                                   1:6.9.11.1-1.el8.remi                            remi
ImageMagick-perl.x86_64                                   1:6.9.11.1-1.el8.remi                            remi
ImageMagick7.x86_64                                       7.0.10.1-1.el8.remi                              remi
ImageMagick7-c++.x86_64                                   7.0.10.1-1.el8.remi                              remi-safe
ImageMagick7-c++-devel.x86_64                             7.0.10.1-1.el8.remi                              remi
ImageMagick7-devel.x86_64                                 7.0.10.1-1.el8.remi                              remi
ImageMagick7-djvu.x86_64                                  7.0.10.1-1.el8.remi                              remi-safe
ImageMagick7-doc.x86_64                                   7.0.10.1-1.el8.remi                              remi
ImageMagick7-heic.x86_64                                  7.0.10.1-1.el8.remi                              remi-safe
ImageMagick7-libs.x86_64                                  7.0.10.1-1.el8.remi                              remi-safe
ImageMagick7-perl.x86_64                                  7.0.10.1-1.el8.remi                              remi

# dnf install -y ImageMagick7.x86_64
メタデータの期限切れの最終確認: 0:01:37 時間前の YYYY年mm月dd日 hh時ii分ss秒 に実施しました。
依存関係が解決しました。
=============================================================================================================================================================================================================================================
 パッケージ                                                              アーキテクチャー                               バージョン                                                   リポジトリー                                      サイズ
=============================================================================================================================================================================================================================================
インストール:
 ImageMagick7                                                            x86_64                                         7.0.10.1-1.el8.remi                                          remi                                               95 k
依存関係のインストール:
 LibRaw                                                                  x86_64                                         0.19.1-1.el8                                                 AppStream                                         316 k
 OpenEXR-libs                                                            x86_64                                         2.2.0-11.el8                                                 AppStream                                         675 k
 fftw-libs-double                                                        x86_64                                         3.3.5-11.el8                                                 AppStream                                         992 k
 graphviz                                                                x86_64                                         2.40.1-39.el8                                                AppStream                                         1.7 M
 ilmbase                                                                 x86_64                                         2.2.0-11.el8                                                 AppStream                                         115 k
 libXaw                                                                  x86_64                                         1.0.13-10.el8                                                AppStream                                         194 k
 libwmf-lite                                                             x86_64                                         0.2.9-8.el8_0                                                AppStream                                          77 k
 xorg-x11-fonts-ISO8859-1-100dpi                                         noarch                                         7.5-19.el8                                                   AppStream                                         1.1 M
 libraqm                                                                 x86_64                                         0.7.0-4.el8                                                  epel                                               19 k
 ImageMagick7-libs                                                       x86_64                                         7.0.10.1-1.el8.remi                                          remi-safe                                         2.4 M
 liblqr-1                                                                x86_64                                         0.4.2-11.el8.remi                                            remi-safe                                          51 k

トランザクションの概要
=============================================================================================================================================================================================================================================
インストール  12 パッケージ

## 略

完了しました!

OK。

# convert -v
Version: ImageMagick 7.0.10-1 Q16 x86_64 2020-03-17 https://imagemagick.org
Copyright: c 1999-2020 ImageMagick Studio LLC

## 略

入っていますね。

# dnf list available | grep GhostScript
# dnf install ghostscript
メタデータの期限切れの最終確認: 0:03:40 時間前の YYYY年mm月dd日 hh時ii分ss秒 に実施しました。
パッケージ ghostscript-9.25-5.el8_1.1.x86_64 は既にインストールされています。
依存関係が解決しました。
行うべきことはありません。
完了しました!
#

なん……だと……。

# gs -v
GPL Ghostscript 9.25 (2018-09-13)
Copyright (C) 2018 Artifex Software, Inc.  All rights reserved.

入っていますね……いつの間にやら。ということでインストール完了。

5. imagickインストール (ここから沼)

# dnf install php-pear
CentOS-8 - AppStream                                         3.8 kB/s | 4.3 kB     00:01
CentOS-8 - Base                                              6.8 kB/s | 3.8 kB     00:00
CentOS-8 - Extras                                            3.0 kB/s | 1.5 kB     00:00
Extra Packages for Enterprise Linux Modular 8 - x86_64       7.9 kB/s | 7.3 kB     00:00
Extra Packages for Enterprise Linux 8 - x86_64               7.7 kB/s | 4.4 kB     00:00
Remi's Modular repository for Enterprise Linux 8 - x86_64    1.4 kB/s | 3.5 kB     00:02
Safe Remi's RPM repository for Enterprise Linux 8 - x86_64   2.8 kB/s | 3.0 kB     00:01
Safe Remi's RPM repository for Enterprise Linux 8 - x86_64    12 kB/s | 1.4 MB     01:55
Remi's RPM repository for Enterprise Linux 8 - x86_64        493  B/s | 3.0 kB     00:06
Remi's RPM repository for Enterprise Linux 8 - x86_64        669 kB/s | 2.8 MB     00:04
パッケージ php-pear-1:1.10.10-4.el8.remi.noarch は既にインストールされています。
依存関係が解決しました。
行うべきことはありません。
完了しました!

OKです。ということでpecl使用でimagickをインストールしてみます。

# pecl install imagick

Notice: Trying to access array offset on value of type bool in PEAR/REST.php on line 181

Notice: Trying to access array offset on value of type bool in PEAR/REST.php on line 181

Notice: Trying to access array offset on value of type bool in PEAR/REST.php on line 181

Notice: Trying to access array offset on value of type bool in PEAR/REST.php on line 181
WARNING: channel "pecl.php.net" has updated its protocols, use "pecl channel-update pecl.php.net" to update
downloading imagick-3.4.4.tgz ...
Starting to download imagick-3.4.4.tgz (253,434 bytes)
.....................................................done: 253,434 bytes
19 source files, building
running: phpize
Can't find PHP headers in /usr/include/php
The php-devel package is required for use of this command.
ERROR: `phpize' failed

なんですって……。

を参考にして対処。php-develをインストールします。

# dnf install php-devel
メタデータの期限切れの最終確認: 0:03:05 時間前の YYYY年mm月dd日 hh時ii分ss秒 に実施しました。
エラー:
 問題: cannot install the best candidate for the job
  - nothing provides libedit-devel(x86-64) needed by php-devel-7.4.4-1.el8.remi.x86_64
(インストール不可のパッケージをスキップするには、'--skip-broken' を追加してみてください または、'--nobest' を追加して、最適候補のパッケージのみを使用しないでください)

なん……だと……。

エラーメッセージで検索したらこのスレッドが出てきたので対処。dnf config-manager --set-enabled PowerToolsを叩くだけで良いらしいです。

# dnf config-manager --set-enabled PowerTools
# dnf install php-devel
CentOS-8 - AppStream                         2.7 kB/s | 4.3 kB     00:01
CentOS-8 - Base

## 略

完了しました!

……本当にこれだけでできてしまいました。

改めてimagickを入れます。

# pecl install imagick
WARNING: channel "pecl.php.net" has updated its protocols, use "pecl channel-update pecl.php.net" to update
downloading imagick-3.4.4.tgz ...
Starting to download imagick-3.4.4.tgz (253,434 bytes)
.....................................................done: 253,434 bytes
19 source files, building
running: phpize
Configuring for:
PHP Api Version:         20190902
Zend Module Api No:      20190902
Zend Extension Api No:   320190902
Please provide the prefix of ImageMagick installation [autodetect] :

Warning: Use of undefined constant name - assumed 'name' (this will throw an Error in a future version of PHP) in PEAR/Builder.php on line 405
building in /var/tmp/pear-build-rootFPfQe9/imagick-3.4.4
running: /var/tmp/imagick/configure --with-php-config=/usr/bin/php-config --with-imagick
checking for grep that handles long lines and -e... /usr/bin/grep

## 略

checking if debug is enabled... no
checking if zts is enabled... no
checking for gawk... gawk
checking whether to enable the imagick extension... yes, shared
checking for pkg-config... /usr/bin/pkg-config
checking ImageMagick MagickWand API configuration program... checking Testing /usr/local/bin/MagickWand-config... Doesn't exist
checking Testing /usr/bin/MagickWand-config... Doesn't exist
checking Testing /usr/sbin/bin/MagickWand-config... Doesn't exist
checking Testing /opt/bin/MagickWand-config... Doesn't exist
checking Testing /opt/local/bin/MagickWand-config... Doesn't exist
configure: error: not found. Please provide a path to MagickWand-config or Wand-config program.
ERROR: `/var/tmp/imagick/configure --with-php-config=/usr/bin/php-config --with-imagick' failed

また怒られました……。

に拠るとImageMagickImageMagick-develは別物らしいです。……なんですって。

# dnf remove ImageMagick7.x86_64
モジュラーの依存に関する問題:

## 略

完了しました!

OK。

# convert -v
-bash: /usr/bin/convert: そのようなファイルやディレクトリはありません

消えました。

# dnf install ImageMagick-devel
メタデータの期限切れの最終確認: 0:10:45 時間前の YYYY年mm月dd日 hh時ii分ss秒 に実施しました。
依存関係が解決しました。

## 略

完了しました!

# convert -v
Version: ImageMagick 6.9.11-1 Q16 x86_64 2020-03-17 https://imagemagick.org
Copyright: c 1999-2020 ImageMagick Studio LLC

## 略

バージョンが落ちた気がしますが、これで良いのでしょうか……。再再度挑戦。

# pecl install imagick
WARNING: channel "pecl.php.net" has updated its protocols, use "pecl channel-update pecl.php.net" to update
downloading imagick-3.4.4.tgz ...
Starting to download imagick-3.4.4.tgz (253,434 bytes)
.....................................................done: 253,434 bytes
19 source files, building
running: phpize
Configuring for:
PHP Api Version:         20190902
Zend Module Api No:      20190902
Zend Extension Api No:   320190902
Please provide the prefix of ImageMagick installation [autodetect] : imagick

Warning: Use of undefined constant name - assumed 'name' (this will throw an Error in a future version of PHP) in PEAR/Builder.php on line 407
building in /var/tmp/pear-build-root1CKavl/imagick-3.4.4
running: /var/tmp/imagick/configure --with-php-config=/usr/bin/php-config --with-imagick=imagick
checking for grep that handles long lines and -e... /usr/bin/grep

## 略

checking ImageMagick MagickWand API configuration program... checking Testing imagick/bin/MagickWand-config... Doesn't exist
checking Testing imagick/bin/Wand-config... Doesn't exist
checking Testing /usr/local/bin/MagickWand-config... Doesn't exist
checking Testing /usr/local/bin/Wand-config... Doesn't exist
checking Testing /usr/bin/MagickWand-config... It exists
found in /usr/bin/MagickWand-config
checking if ImageMagick version is at least 6.2.4... found version 6.9.11 Q16
checking for MagickWand.h or magick-wand.h header... user location /usr/include/ImageMagick-6/wand/MagickWand.h
checking PHP version is at least 5.3.2... yes. found 7.4.4
libs
-lMagickWand-6.Q16 -lMagickCore-6.Q16


checking for MagickGetVersion... yes

## 略

checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... yes
checking whether to build static libraries... no
configure: patching config.h.in
configure: creating ./config.status
config.status: creating config.h
config.status: executing libtool commands
running: make
sh: make: コマンドが見つかりません
ERROR: `make' failed

まさかのmakeがないですって……。

# dnf -y install gcc make
メタデータの期限切れの最終確認: 7:40:24 時間前の YYYY年mm月dd日 hh時ii分ss秒 に 実施しました。
パッケージ gcc-8.3.1-4.5.el8.x86_64 は既にインストールされています。
依存関係が解決しました。
================================================================================
 パッケージ     アーキテクチャー バージョン              リポジトリー     サイズ
================================================================================
インストール:
 make           x86_64           1:4.2.1-9.el8           BaseOS           498 k

トランザクションの概要
================================================================================
インストール  1 パッケージ

ダウンロードサイズの合計: 498 k
インストール済みのサイズ: 1.4 M
パッケージのダウンロード:
make-4.2.1-9.el8.x86_64.rpm                     1.6 MB/s | 498 kB     00:00
--------------------------------------------------------------------------------
合計                                            363 kB/s | 498 kB     00:01
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
  準備             :                                                        1/1
  インストール中   : make-1:4.2.1-9.el8.x86_64                              1/1
  scriptletの実行中: make-1:4.2.1-9.el8.x86_64                              1/1
  検証             : make-1:4.2.1-9.el8.x86_64                              1/1

インストール済み:
  make-1:4.2.1-9.el8.x86_64

完了しました!

OK。再再再度、挑戦。

# pecl install imagick
WARNING: channel "pecl.php.net" has updated its protocols, use "pecl channel-update pecl.php.net" to update
downloading imagick-3.4.4.tgz ...
Starting to download imagick-3.4.4.tgz (253,434 bytes)
.....................................................done: 253,434 bytes
19 source files, building
running: phpize
Configuring for:
PHP Api Version:         20190902
Zend Module Api No:      20190902
Zend Extension Api No:   320190902
Please provide the prefix of ImageMagick installation [autodetect] : imagick

Warning: Use of undefined constant name - assumed 'name' (this will throw an Error in a future version of PHP) in PEAR/Builder.php on line 407
building in /var/tmp/pear-build-rootEJJkZl/imagick-3.4.4
running: /var/tmp/imagick/configure --with-php-config=/usr/bin/php-config --with-imagick=imagick
checking for grep that handles long lines and -e... /usr/bin/grep

## 略

checking if ImageMagick version is at least 6.2.4... found version 6.9.11 Q16
checking for MagickWand.h or magick-wand.h header... user location /usr/include/ImageMagick-6/wand/MagickWand.h
checking PHP version is at least 5.3.2... yes. found 7.4.4
libs
-lMagickWand-6.Q16 -lMagickCore-6.Q16


checking for MagickGetVersion... yes

## 略

configure: creating ./config.status
config.status: creating config.h
config.status: executing libtool commands
running: make
/bin/sh /var/tmp/pear-build-rootEJJkZl/imagick-3.4.4/libtool --mode=compile cc -I/usr/include/ImageMagick-6 -fopenmp -DMAGICKCORE_HDRI_ENABLE=0 -DMAGICKCORE_QUANTUM_DEPTH=16  -I. -I/var/tmp/imagick -DPHP_ATOM_INC -I/var/tmp/pear-build-rootEJJkZl/imagick-3.4.4/include -I/var/tmp/pear-build-rootEJJkZl/imagick-3.4.4/main -I/var/tmp/imagick -I/usr/include/php -I/usr/include/php/main -I/usr/include/php/TSRM -I/usr/include/php/Zend -I/usr/include/php/ext -I/usr/include/php/ext/date/lib -I/usr/include/ImageMagick-6  -DHAVE_CONFIG_H  -g -O2   -c /var/tmp/imagick/imagick_file.c -o imagick_file.lo
libtool: compile:  cc -I/usr/include/ImageMagick-6 -fopenmp -DMAGICKCORE_HDRI_ENABLE=0 -DMAGICKCORE_QUANTUM_DEPTH=16 -I. -I/var/tmp/imagick -DPHP_ATOM_INC -I/var/tmp/pear-build-rootEJJkZl/imagick-3.4.4/include -I/var/tmp/pear-build-rootEJJkZl/imagick-3.4.4/main -I/var/tmp/imagick -I/usr/include/php -I/usr/include/php/main -I/usr/include/php/TSRM -I/usr/include/php/Zend -I/usr/include/php/ext -I/usr/include/php/ext/date/lib -I/usr/include/ImageMagick-6 -DHAVE_CONFIG_H -g -O2 -c /var/tmp/imagick/imagick_file.c  -fPIC -DPIC -o .libs/imagick_file.o
/bin/sh /var/tmp/pear-build-rootEJJkZl/imagick-3.4.4/libtool --mode=compile cc -I/usr/include/ImageMagick-6 -fopenmp -DMAGICKCORE_HDRI_ENABLE=0 -DMAGICKCORE_QUANTUM_DEPTH=16  -I. -I/var/tmp/imagick -DPHP_ATOM_INC -I/var/tmp/pear-build-rootEJJkZl/imagick-3.4.4/include -I/var/tmp/pear-build-rootEJJkZl/imagick-3.4.4/main -I/var/tmp/imagick -I/usr/include/php -I/usr/include/php/main -I/usr/include/php/TSRM -I/usr/include/php/Zend -I/usr/include/php/ext -I/usr/include/php/ext/date/lib -I/usr/include/ImageMagick-6  -DHAVE_CONFIG_H  -g -O2   -c /var/tmp/imagick/imagick_class.c -o imagick_class.lo
libtool: compile:  cc -I/usr/include/ImageMagick-6 -fopenmp -DMAGICKCORE_HDRI_ENABLE=0 -DMAGICKCORE_QUANTUM_DEPTH=16 -I. -I/var/tmp/imagick -DPHP_ATOM_INC -I/var/tmp/pear-build-rootEJJkZl/imagick-3.4.4/include -I/var/tmp/pear-build-rootEJJkZl/imagick-3.4.4/main -I/var/tmp/imagick -I/usr/include/php -I/usr/include/php/main -I/usr/include/php/TSRM -I/usr/include/php/Zend -I/usr/include/php/ext -I/usr/include/php/ext/date/lib -I/usr/include/ImageMagick-6 -DHAVE_CONFIG_H -g -O2 -c /var/tmp/imagick/imagick_class.c  -fPIC -DPIC -o .libs/imagick_class.o
/var/tmp/imagick/imagick_class.c: 関数 ‘zim_imagick_getimagematte’ 内:
/var/tmp/imagick/imagick_class.c:299:2: 警告: ‘MagickGetImageMatte’ is deprecated [-Wdeprecated-declarations]
  matte = MagickGetImageMatte(intern->magick_wand);
  ^~~~~
In file included from /usr/include/ImageMagick-6/wand/MagickWand.h:83,
                 from /var/tmp/imagick/php_imagick_defs.h:29,
                 from /var/tmp/imagick/imagick_class.c:22:
/usr/include/ImageMagick-6/wand/deprecate.h:85:3: 備考: ここで宣言されています
   MagickGetImageMatte(MagickWand *) magick_attribute((deprecated)),
   ^~~~~~~~~~~~~~~~~~~
/var/tmp/imagick/imagick_class.c: 関数 ‘zim_imagick_paintfloodfillimage’ 内:
/var/tmp/imagick/imagick_class.c:1284:3: 警告: ‘MagickPaintFloodfillImage’ is deprecated [-Wdeprecated-declarations]
   status = MagickPaintFloodfillImage(intern->magick_wand, channel, fill_wand, fuzz, NULL, x, y);
   ^~~~~~

## 略。「備考: ここで宣言されています」の警告が大量に出力

/bin/sh /var/tmp/pear-build-rootEJJkZl/imagick-3.4.4/libtool --mode=compile cc -I/usr/include/ImageMagick-6 -fopenmp -DMAGICKCORE_HDRI_ENABLE=0 -DMAGICKCORE_QUANTUM_DEPTH=16  -I. -I/var/tmp/imagick -DPHP_ATOM_INC -I/var/tmp/pear-build-rootEJJkZl/imagick-3.4.4/include -I/var/tmp/pear-build-rootEJJkZl/imagick-3.4.4/main -I/var/tmp/imagick -I/usr/include/php -I/usr/include/php/main -I/usr/include/php/TSRM -I/usr/include/php/Zend -I/usr/include/php/ext -I/usr/include/php/ext/date/lib -I/usr/include/ImageMagick-6  -DHAVE_CONFIG_H  -g -O2   -c /var/tmp/imagick/imagickdraw_class.c -o imagickdraw_class.lo

## 略

/bin/sh /var/tmp/pear-build-rootEJJkZl/imagick-3.4.4/libtool --mode=install cp ./imagick.la /var/tmp/pear-build-rootEJJkZl/imagick-3.4.4/modules
libtool: install: cp ./.libs/imagick.so /var/tmp/pear-build-rootEJJkZl/imagick-3.4.4/modules/imagick.so
libtool: install: cp ./.libs/imagick.lai /var/tmp/pear-build-rootEJJkZl/imagick-3.4.4/modules/imagick.la
libtool: finish: PATH="/usr/share/Modules/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/sbin" ldconfig -n /var/tmp/pear-build-rootEJJkZl/imagick-3.4.4/modules
----------------------------------------------------------------------
Libraries have been installed in:
   /var/tmp/pear-build-rootEJJkZl/imagick-3.4.4/modules

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the '-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the 'LD_LIBRARY_PATH' environment variable
     during execution
   - add LIBDIR to the 'LD_RUN_PATH' environment variable
     during linking
   - use the '-Wl,-rpath -Wl,LIBDIR' linker flag
   - have your system administrator add LIBDIR to '/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------

Build complete.
Don't forget to run 'make test'.

running: make INSTALL_ROOT="/var/tmp/pear-build-rootEJJkZl/install-imagick-3.4.4" install
Installing shared extensions:     /var/tmp/pear-build-rootEJJkZl/install-imagick-3.4.4/usr/lib64/php/modules/
Installing header files:          /var/tmp/pear-build-rootEJJkZl/install-imagick-3.4.4/usr/include/php/
running: find "/var/tmp/pear-build-rootEJJkZl/install-imagick-3.4.4" | xargs ls -dils
395478    4 drwxr-xr-x 3 root root    4096 mm月 dd hh:ii /var/tmp/pear-build-rootEJJkZl/install-imagick-3.4.4
395515    4 drwxr-xr-x 4 root root    4096 mm月 dd hh:ii /var/tmp/pear-build-rootEJJkZl/install-imagick-3.4.4/usr
395519    4 drwxr-xr-x 3 root root    4096 mm月 dd hh:ii /var/tmp/pear-build-rootEJJkZl/install-imagick-3.4.4/usr/include
395520    4 drwxr-xr-x 3 root root    4096 mm月 dd hh:ii /var/tmp/pear-build-rootEJJkZl/install-imagick-3.4.4/usr/include/php
395521    4 drwxr-xr-x 3 root root    4096 mm月 dd hh:ii /var/tmp/pear-build-rootEJJkZl/install-imagick-3.4.4/usr/include/php/ext
395522    4 drwxr-xr-x 2 root root    4096 mm月 dd hh:ii /var/tmp/pear-build-rootEJJkZl/install-imagick-3.4.4/usr/include/php/ext/imagick
395523    4 -rw-r--r-- 1 root root    1828 mm月 dd hh:ii /var/tmp/pear-build-rootEJJkZl/install-imagick-3.4.4/usr/include/php/ext/imagick/php_imagick_shared.h
395516    4 drwxr-xr-x 3 root root    4096 mm月 dd hh:ii /var/tmp/pear-build-rootEJJkZl/install-imagick-3.4.4/usr/lib64
395517    4 drwxr-xr-x 3 root root    4096 mm月 dd hh:ii /var/tmp/pear-build-rootEJJkZl/install-imagick-3.4.4/usr/lib64/php
395518    4 drwxr-xr-x 2 root root    4096 mm月 dd hh:ii /var/tmp/pear-build-rootEJJkZl/install-imagick-3.4.4/usr/lib64/php/modules
395514 1600 -rwxr-xr-x 1 root root 1637024 mm月 dd hh:ii /var/tmp/pear-build-rootEJJkZl/install-imagick-3.4.4/usr/lib64/php/modules/imagick.so

Build process completed successfully
Installing '/usr/lib64/php/modules/imagick.so'
Installing '/usr/include/php/ext/imagick/php_imagick_shared.h'
install ok: channel://pecl.php.net/imagick-3.4.4
configuration option "php_ini" is not set to php.ini location
You should add "extension=imagick.so" to php.ini

途中で警告が大量に出ましたが、最後まで行ったようなのでひとまずOKとします。

# vi /etc/php.ini


;;;;;;;;;;;;;;;;;;;;;;
; Dynamic Extensions ;
;;;;;;;;;;;;;;;;;;;;;;

; If you wish to have an extension loaded automatically, use the following
; syntax:
;
;   extension=modulename
;
; For example:
;
;   extension=mysqli
;
; When the extension library to load is not located in the default extension
; directory, You may specify an absolute path to the library file:
;
;   extension=/path/to/extension/mysqli.so
;
; Note : The syntax used in previous PHP versions ('extension=<ext>.so' and
; 'extension='php_<ext>.dll') is supported for legacy reasons and may be
; deprecated in a future PHP major version. So, when it is possible, please
; move to the new ('extension=<ext>) syntax.


extension=imagick.so ;追記

読み込みを追記。

# systemctl restart httpd

Apacheを再起動。が、……phpinfoimagickが出ず。

# php -m | grep imagick
imagick

# php -i | grep imagick
imagick
imagick module => enabled
imagick module version => 3.4.4
imagick classes => Imagick, ImagickDraw, ImagickPixel, ImagickPixelIterator, ImagickKernel
imagick.locale_fix => 0 => 0
imagick.progress_monitor => 0 => 0
imagick.skip_version_check => 0 => 0

こちらは出ますね……。

# less /var/log/php-fpm/www-error.log

PHP Fatal error:  Uncaught Error: Class 'Imagick' not found in /PATH/TO/PHP/ON/WEBROOT/index.php:10
Stack trace:
#0 {main}

やはりないと怒られている模様……。

この記事に拠るとサーバ自体の再起動で直った、とのことなので

# reboot

で再起動。

起動してからphpinfoの情報を見ると……

imagickがphpinfoに表示されるようになった
imagickがphpinfoに表示されるようになった

読み込まれている!

<?php

$imagick = new Imagick();

$data = file_get_contents(__DIR__ . '/pdf/wagahaihanekodearu.pdf');
$imagick->readImageBlob($data);

$imagick->setImageFormat('jpg');

$imagick->writeimage(__DIR__ . '/images/wagahaihanekodearu.jpg');

雑に上述のコードを書いてindex.phpとし、以下のようなディレクトリ構成にします。

/
├ images/
├ pdf/
│  └ wagahaihanekodearu.pdf
└ index.php

それから、権限設定。

# chmod 777 /var/www/kur/web/images

仮なので雑です。これでhttp://kur.example.com/にブラウザでアクセス。するとimagesディレクトリにjpgファイルが生成されました。

ダウンロードして開いてみます。

画像変換されたPDF(テスト成功)
画像変換されたPDF(テスト成功)

確かに変換された画像が生成されました!

勝ったッ!imagick完!

……長かった……。

参考

この記事を書いた人

アルム=バンド

フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。