PHPのImagickで「Unable to load dynamic library ‘imagick.so’」とWarningが出て読み込まなくなった件

どうも、UT(@ut_1029)です。
先日サーバでyum updateを行ったところ、PHPのImagickで「Unable to load dynamic library 'imagick.so’」とWarningが出力されるようになりました。
Warningの原因
/usr/lib64/php/modules/imagick.soが内部で読み込んでいるImagiMagickのライブラリ(libMagickWand.so.5)がバージョンアップにより無くなりImagickでライブラリが読み込めなくなったのだと。
- PHP
- 7.2.34
- ImageMagick
- 6.9.10.68-3
- Imagick
- 3.4.4
参考:ImageMagickのアップデートでPHP imagickの警告が出た。
PHPのImagickで「Unable to load dynamic library 'imagick.so’」とWarningが出力される件について
PHPコマンドを実行すると以下のWarningが出力されるようになりました。
$ php -v
PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /usr/lib64/php/modules/imagick.so.so (/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
PHP 7.2.34 (cli) (built: Oct 21 2020 18:03:20) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.2.34, Copyright (c) 1999-2018, by Zend Technologies
とりあえずライブラリの状態などを確認していきます。
原因と状態を確認
yumでインストールされているImageMagickのバージョンを確認。
$ yum list installed | grep Image
ImageMagick.x86_64 6.9.10.68-3.amzn2.0.1 @amzn2-core
ImageMagick-devel.x86_64 6.9.10.68-3.amzn2.0.1 @amzn2-core
→ImageMagickのバージョンは、6.9.10.68。
PECLでImagickのバージョンを確認。
$ pecl list
PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /usr/lib64/php/modules/imagick.so.so (/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
INSTALLED PACKAGES, CHANNEL PECL.PHP.NET:
=========================================
PACKAGE VERSION STATE
imagick 3.4.4 stable
→Imagickのバージョンは、3.4.4。
yumでImagickがインストールされているか確認。
$ yum list installed | grep imagick
→yumではImagickをパッケージ管理していないっぽい。
PHPで読み込まれているモジュールにImagickが含まれているか確認。
$ php -m | less
[PHP Modules]
・・・
→やっぱりPHPでImagickは読み込まれていない。
PHPのImagickモジュールの存在を確認。
$ ls -la /etc/php.d/ | grep imagick
→/etc/php.d/にはImagick.iniはなさそう。
$ ls -la /usr/lib64/php/modules/
・・・
-rwxr-xr-x 1 root root 428720 Jul 30 08:01 imagick.so
・・・
→/usr/lib64/php/modules/にはimagick.soがあった。
PECLでImagickをバージョンアップ
PECLでImagickのバージョンアップを試す。
$ pecl upgrade imagick
PHP Warning: PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /usr/lib64/php/modules/imagick.so (libMagickWand.so.5: cannot open shared object file: No such file or directory), /usr/lib64/php/modules/imagick.so.so (/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
Nothing to upgrade
→Nothing to upgrade.アップグレードするものがないと言われる。
yumでImagickをインストール
yumでphp-pecl-imagickをインストール。
$ sudo yum install php-pecl-imagick
PHPを再起動。
$ sudo systemctl restart php-fpm.service
Imagickのインストールを確認。
$ yum list installed | grep imagick
php-pecl-imagick.x86_64 3.4.4-1.amzn2.0.3 @amzn2extra-php7.2
$ ls -la /etc/php.d/ | grep imagick
-rw-r--r-- 1 root root 55 Jul 30 08:01 40-imagick.ini
PHPコマンドを実行してWarning消えたか確認。
$ php -v
PHP Warning: Module 'imagick' already loaded in Unknown on line 0
PHP 7.2.34 (cli) (built: Oct 21 2020 18:03:20) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.2.34, Copyright (c) 1999-2018, by Zend Technologies
→「PHP Warning: Module 'imagick’ already loaded in Unknown on line 0」とWarningが出力されました。(imagickを複数回読み込んじゃってるみたい。)
php.iniを確認します。
$ sudo vi /etc/php.ini
extension=imagick.so
↓ (変更)
; extension=imagick.so
→/etc/php.d/40-imagick.iniでimagick.soを読み込んでいるので、php.iniはコメントアウトにして読み込まないように変更。
PHPを再起動します。
$ sudo systemctl restart php-fpm.service
これでWarningが消えることを確認。
ImageMagickとImagickについて
ImageMagick
画像処理関連のライブラリーです。コマンドライン上で実行したり、APIライブラリとしても利用することも出来ます。
Imagickとは
PHPでImageMagick APIを使用して画像処理をするためのPHP拡張モジュールです。
ImageMagickのセキュリティについて
ImageMagickには脆弱性や不具合が多数報告されているライブラリだったりします。
おわり
今回は比較的すぐに対応できましたが、サーバのアップデートって何かしら依存関係とかでエラーが出たりしちゃうので焦ります。。。
ディスカッション
コメント一覧
まだ、コメントがありません