エラー
amazonlinux2で動くwordpressにあるテーマをインストールしたら以下のエラーに遭遇。
Uncaught Error: Call to undefined function simplexml_load_string
ググった結果、どうやらSimpleXMLモジュールが入っていないとのこと。
動作環境
$ php -v
PHP 7.4.7 (cli) (built: Jul 2 2020 23:17:59) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
$ amazon-linux-extras | grep enabled
24 epel=latest enabled [ =7.11 =stable ]
42 php7.4=latest enabled [ =stable ]
$ yum list installed | grep php
php-cli.x86_64 7.4.7-1.amzn2 @amzn2extra-php7.4
php-common.x86_64 7.4.7-1.amzn2 @amzn2extra-php7.4
php-fpm.x86_64 7.4.7-1.amzn2 @amzn2extra-php7.4
php-json.x86_64 7.4.7-1.amzn2 @amzn2extra-php7.4
php-mbstring.x86_64 7.4.7-1.amzn2 @amzn2extra-php7.4
php-mysqlnd.x86_64 7.4.7-1.amzn2 @amzn2extra-php7.4
php-pdo.x86_64 7.4.7-1.amzn2 @amzn2extra-php7.4
対処方法
amazon-linux-extrasでepelを有効化して、php-xmlをインストールする。
sudo yum install php-xml -y
SimpleXMLが読み込まれていることを確認する。
$ php -i | grep -i simplexml
/etc/php.d/20-simplexml.ini
SimpleXML
SimpleXML support => enabled
それから、あるWebページでモジュールの読み込み順番が大切との記述を発見。
この原因がなかなかわからず、権限変えたり色々やりましたが、結論としてモジュールを読み込む順番が大切でした。
simplexml.so を実行するためには、別の拡張モジュールが必要になるため、そのモジュールよりも後に拡張モジュールを読み込まないとエラーになる、ということのようです。
そのため、simplexmlモジュールの読み込み順番の調整する。
mv /etc/php.d/{20,40}-simplexml.ini
最後に、php-fpmとhttpdを再起動する
sudo systemctl restart php-fpm
sudo systemctl restart httpd
これでエラーが解消された。
初め、php-fpmが動いていることに気づかず、httpdだけ再起動しても反映されなくて焦った。