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

2020年11月30日システムLinux,PHP

PHPのImagickで「Unable to load dynamic library 'imagick.so'」とWarningが出て読み込まなくなった件
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には脆弱性や不具合が多数報告されているライブラリだったりします。

参照:「さようなら ImageMagick」の考察

おわり

今回は比較的すぐに対応できましたが、サーバのアップデートって何かしら依存関係とかでエラーが出たりしちゃうので焦ります。。。

UT
UTの日常

1985年生まれ1児の父親です。ブログとか副業で収入を得る手段を模索中であります。(無理しない程度が理想wだから実績が出ないorz)
UTのプロフィール
Amazon欲しいものリスト

2020年11月30日システムLinux,PHP

Posted by UT