2026年5月20日

2026年5月20日

PHPのFatal errorを解決する方法【WordPress白い画面の原因】

はじめに

「Fatal error」はPHPの致命的エラーで、処理が完全に停止してページが真っ白になったり、エラーメッセージが表示されたりします。WordPressで最もよく起きるPHPエラーの一つです。エラーメッセージを読み解いて、適切な対処をすることが重要です。

主なFatal errorの種類と原因

// よく見るFatal error
Fatal error: Call to undefined function xxx()
→ 存在しない関数を呼び出している

Fatal error: Class 'SomeClass' not found
→ 必要なクラスが読み込まれていない

Fatal error: Allowed memory size of xxx bytes exhausted
→ PHPのメモリ上限を超えた

Fatal error: Maximum execution time of 30 seconds exceeded
→ 処理時間の上限を超えた

Fatal error: Cannot redeclare xxx()
→ 同じ名前の関数が複数回定義されている

解決手順

ステップ1:デバッグモードでエラー詳細を確認

// wp-config.phpに追加
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);

エラー内容を/wp-content/debug.logで確認します。

ステップ2:Call to undefined function

最多パターン。存在しない関数を呼んでいる:

// 原因1:プラグイン/テーマの関数を読み込む前に呼び出している
add_action('init', function() {
    my_plugin_function();  // プラグインがまだ読み込まれていない場合
});

// 対処:hookのタイミングを遅らせる
add_action('plugins_loaded', function() {
    my_plugin_function();  // 全プラグイン読み込み後に実行
});

プラグインが原因の場合: FTPでプラグインフォルダを_offにリネームして無効化

ステップ3:Allowed memory size exhausted

// wp-config.phpでメモリ制限を増やす
define('WP_MEMORY_LIMIT', '256M');
define('WP_MAX_MEMORY_LIMIT', '512M');  // 管理画面用
# php.iniに追加(VPSなど)
memory_limit = 256M
# .htaccessに追加(Apache)
php_value memory_limit 256M

ステップ4:Cannot redeclare

同じ名前の関数が2回定義されている:

// ❌ 問題:同じ名前の関数が2つある
function my_helper() { /* A */ }
function my_helper() { /* B */ }  // Fatal error!

// ✅ 解決:function_exists()で存在確認してから定義
if (!function_exists('my_helper')) {
    function my_helper() { /* ... */ }
}

プラグインのアップデートやコピーで同じ関数が重複することがあります。

ステップ5:Class not found

// オートローダーが正しく設定されているか確認
// プラグイン内の場合はcomposer.jsonのautoload設定を確認
require_once 'vendor/autoload.php';  // Composerを使う場合

// 手動でinclude
require_once plugin_dir_path(__FILE__) . 'includes/class-my-plugin.php';

ステップ6:プラグイン・テーマのアップデートで発生した場合

最近のアップデート直後に発生した場合:

1. FTPでそのプラグイン/テーマを古いバージョンに戻す

2. または:FTPでそのプラグインを無効化してから管理画面で再有効化

3. プラグインの開発者にバグ報告する

まとめ

Fatal errorはエラーメッセージのファイル名・行番号を確認して対処します。「Call to undefined function」はプラグイン無効化で確認、「Allowed memory size exhausted」はメモリ制限の増加、「Cannot redeclare」はfunction_exists()でのガードで解決します。

関連記事:

お気軽にご相談ください

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