先日、この WordPress を動かしているサーバーを、アップグレードしたと書きました。
サーバーを置き換えたため、当然コンテンツの確認は行ったのですが、全部のページを確認したわけではなく、その時は正常に動作しているものと思っていました。ところが、一部のページに問題が発生していたことがわかりました。
Amazon へのリンクを含むページをアクセスすると、画面が真っ白になり、
Fatal error: Class 'DOMDocument' not found in wp-content/plugins/jetpack/modules/shortcodes/class.filter-embedded-html-objects.php on line 243
と表示されていることがわかりました。
何これ?と、検索エンジンで検索してみると、「DOMDocument not found」とあるときは php-xml が入っていないと書かれているページが見つかりました。php モジュールの入れ忘れ!とのこと。
しかし、
pkg info |grep xml
でパッケージ内容を確認してみると、
php56-xml-5.6.30 The xml shared extension for php
ちゃんと入っている。
もっと調べてみると、php-xml 入れ忘れが原因じゃない場合は、php-dom が無いという記述を発見。確かに入っていません。早速、php56-dom をインストールして試したところ、今度は別のエラーが発生。
Fatal error: Call to undefined function simplexml_load_string() in wp-content/plugins/jetpack/modules/shortcodes/class.filter-embedded-html-objects.php on line 255
今度は、「Call to undefined function simplexml_load_string()」だそうです。これもキーワード検索したところ、simplexml.so が有効になっていないんだそうです。そんなライブラリがあるのか?と pkg search してみると、「php56-simplexml」ってあるじゃない。またまた 「pkg install php56-simplexml」 でパッケージを追加インストール。
このあと、再びApacheを再起動してみると、エラーが消えてくれました。「ほっ!」って気分。
原因は、php56-dom と php56-simplexml モジュールが入っていなかったことです。
問題が一段落して、旧サーバーをを確認してみると、php56-dom も php56-simplexml も入ってませんよ!サーバー更新までは必要無かったのではないでしょうか?
旧サーバーにあったphp56モジュールと、新サーバーに入れた php56 モジュールの内容は同じでした。
エラーメッセージにあった、
wp-content/plugins/jetpack/modules/shortcodes/class.filter-embedded-html-objects.php
というファイルを旧サーバーに確認しにいったところ、「class.filter-embedded-html-objects.php」というファイルは存在していない!
Jetpack が更新されて、このファイルが追加された以降発生した問題の可能性がありますが、実際のところがどうなのかは確認が難しい。
先日の、php-mysql モジュールのインストール抜けもあったし、私が記憶している WordPress 動作に必要な phpモジュールにアップデートが必要なのかも。WordPress から Amazon を使わない人には関係ない話ですけどね。