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 のバージョン切り替えを試し、だめならサーバー会社に問い合わせます。