2026年5月29日

2026年5月29日

PHP の DOM 拡張が無効なときの直し方|WordPress のサイトヘルス警告と DOMDocument not found

PHP の DOM 拡張(dom)は、HTML や XML を DOMDocument クラスで読み書きするための機能です。WordPress 本体は DOM が無くても動きますが、HTML を加工するプラグインやテーマの一部がこれを使います。

DOM 拡張が無いと、次のどちらかで気づくことがほとんどです。

  • 「ツール」→「サイトヘルス」に 「1つ以上の推奨モジュールが存在しません」 と出て、開くと「オプションのモジュール dom がインストールされていないか、無効化されています。」と書かれている
  • プラグインを有効にした直後などに、画面が止まり、エラーログに次のような致命的エラーが残る
PHP Fatal error:  Uncaught Error: Class "DOMDocument" not found in /var/www/html/wp-content/plugins/...

DOM 拡張は PHP の標準機能で、PHP を自分でビルドした場合は --disable-dom を付けない限り有効です(PHP マニュアル: DOM のインストール)。無効になっているのは、多くの場合 Linux のパッケージで PHP を入れたときに XML 関係のパッケージを入れていないためです。

まず、Web サーバーの PHP で DOM が使えるか確かめる

コマンドラインの php と、Web サーバーが動かしている PHP(PHP-FPM や Apache のモジュール)は設定が別のことがあります。両方を確かめます。

サイトヘルスで確かめる

「ツール」→「サイトヘルス」→「ステータス」を開き、「1つ以上の推奨モジュールが存在しません」の項目に dom が挙がっていなければ、Web サーバーの PHP では有効です。この項目は WordPress が DOMNode クラスの有無で判定しています(class-wp-site-health.php)。

コマンドラインで確かめる

SSH で入れるサーバーなら、次で確かめます。dom と表示されれば、コマンドラインの PHP では有効です。

php -m | grep -i '^dom$'
php --ini   # どの設定ファイルを読んでいるか

Ubuntu・Debian で直す

Ubuntu と Debian では、DOM 拡張は phpX.Y-xml パッケージに含まれています。このパッケージは DOM・SimpleXML・XML・XSL のモジュールを提供します(Debian パッケージ php8.4-xml)。PHP 8.3 の Ubuntu 24.04 で確かめた手順です(2026年11月時点)。

手順は次のとおりです。8.3 の部分は、php -v で確かめたバージョンに合わせます。

# 1. 動いている PHP のバージョンを確かめる
php -v

# 2. 同じバージョンの xml パッケージを入れる
sudo apt update
sudo apt install php8.3-xml

# 3. パッケージは入っているのに無効なときは、有効に戻す
sudo phpenmod dom

# 4. Web サーバー側の PHP を再起動する(使っている方だけ)
sudo systemctl restart php8.3-fpm   # PHP-FPM の場合(Nginx や Apache + PHP-FPM)
sudo systemctl restart apache2      # Apache のモジュール(mod_php)の場合

# 5. 有効になったか確かめる
php -m | grep -i '^dom$'

パッケージを入れると /etc/php/8.3/mods-available/dom.ini(中身は extension=dom.so)が作られ、CLI・FPM などの conf.d に 20-dom.ini として有効化されます。パッケージがあるのに無効なのは、phpdismod dom で外されている場合です。最後にサイトヘルスでも確かめます。

注意: dom だけを外すと、xmlreader や xsl のように DOM に依存するモジュールも読み込めなくなり、起動時に undefined symbol: dom_node_class_entry という警告が出ます。DOM を個別に無効にするのは避けてください。

AlmaLinux・Rocky Linux(RHEL 系)で直す

RHEL 系でも DOM 拡張は php-xml パッケージに含まれ、入れると /etc/php.d/20-dom.ini が作られます(AlmaLinux 9 で確認、2026年11月時点)。

sudo dnf install php-xml
sudo systemctl restart php-fpm   # PHP-FPM の場合
sudo systemctl restart httpd     # Apache の場合
php -m | grep -i '^dom$'

サードパーティのリポジトリで複数の PHP を入れている場合は、Web サーバーが使っている PHP に対応する xml パッケージを入れ、その PHP-FPM を再起動します。

php.ini の extension=dom について

インターネット上には「php.ini の ;extension=dom のセミコロンを外す」という手順が見られますが、Linux のパッケージ版 PHP では、DOM の読み込みは php.ini ではなく、追加の設定ファイル(Ubuntu・Debian は conf.d/20-dom.ini、RHEL 系は /etc/php.d/20-dom.ini)で行います。どのディレクトリを読んでいるかは php --ini の「Scan for additional .ini files in」で分かります。php.ini を書き換える前に、パッケージが入っているかを確かめてください。

Docker の公式 wordpress イメージは、DOM 拡張を最初から含んでいます。

レンタルサーバーの場合

共用のレンタルサーバーでは、PHP の拡張モジュールを利用者が追加することは通常できません。

  • サーバーの管理画面で PHP のバージョンを切り替えられるなら、別のバージョンに切り替えるとモジュールの構成が変わることがあります。切り替えの注意点は WordPress の PHP バージョンを切り替える方法 を参照してください。
  • それでも dom が使えない場合は、サーバー会社のサポートに「PHP の DOM 拡張(dom)を有効にできるか」を問い合わせます。

直したあとに確かめること

  • サイトヘルスの「1つ以上の推奨モジュールが存在しません」から dom が消えたこと。ほかのモジュールが挙がっている場合は、サイトヘルスの警告の対処 も参照してください。
  • 止まっていたプラグインを有効にし、エラーログに Class "DOMDocument" not found が出なくなったこと。

よくある質問

DOM 拡張が無くても WordPress は動きますか

WordPress 本体は動きます。サイトヘルスでも DOM は「必須」ではなく「推奨」(オプション)の扱いです。ただし、DOM を使うプラグインやテーマは致命的エラーで止まるため、有効にしておくのが無難です。

コマンドラインでは dom が出るのに、サイトヘルスでは無効と出ます

コマンドラインの PHP と Web サーバーの PHP が別のバージョン、または別の設定を読んでいます。Web サーバーが使っている PHP-FPM のバージョン(例: php8.3-fpm)に合わせて xml パッケージを入れ、そのサービスを再起動します。

まとめ

  • DOM 拡張が無いと、サイトヘルスの推奨モジュールの警告や、プラグインの Class "DOMDocument" not found エラーになります。
  • Ubuntu・Debian は phpX.Y-xml、RHEL 系は php-xml を入れ、PHP-FPM か Apache を再起動します。
  • 共用レンタルサーバーでは PHP のバージョン切り替えを試し、だめならサーバー会社に問い合わせます。

お気軽にご相談ください

お見積りへ お問い合わせへ
▲