PHPでエラー表示がされない時の対処法!設定を見直して解決しよう

[PR]

Webサイトを運用していて、画面に何も表示されず真っ白、エラーが出ているはずなのに何も見えない――そんな経験はありませんか。PHPのエラーが表示されないときは、環境設定やWordPressの設定、サーバーの挙動、致命的なエラーなど原因が複数考えられます。本記事では「PHP エラー表示 されない」という事象の原因を整理し、ステップごとに最新情報を含めた具体的な対処法を紹介します。設定ファイル、WordPress、サーバーログ、PHPのバージョンなど多面的に見直して、原因を特定し解決につなげましょう。

PHP エラー表示 されない 原因と基本的なチェックポイント

PHPでエラー表示されない状況が起こる基本的な原因と、まずは確認すべき設定を整理します。ここをきちんと押さえておくと、その後の調査がスムーズになります。

php.ini の display_errors 設定がオフになっている

PHPの設定ファイルである php.ini の中にある display_errorsOff に設定されていると、どんな警告やエラーもブラウザに表示されなくなります。致命的なパースエラーも含めて、画面が真っ白になる一因です。同様に、display_startup_errors がオフの場合、起動時のエラーが隠されます。これらは cli、apache モジュール、php-fpm など処理形態によって影響を受けるので、適切な php.ini を編集することが重要です。最新の PHP バージョンでは、display_startup_errors のデフォルト値や動作が変更されているため、その点も確認が必要です。

error_reporting のレベルが低いため見えるはずのエラーが抑制されている

error_reporting の設定が、致命的エラーのみ、あるいは warning や notice を含まないレベルになっていると、通常のコードミスや非推奨の関数呼び出しなどのエラーが表示されません。E_ALL を指定するか、bitmask で包括的にエラーをキャッチできる設定を行う必要があります。最新の PHP では非推奨機能 (deprecated) の扱いも厳しくなってきており、それらが notice や warning として報告されるようになっているためです。

サーバーや PHP-FPM、モジュールによる上書き/制限

PHP がどの環境で動いているかによって、php.ini の設定が反映されないことがあります。たとえば、PHP-FPM を使っていたり、共有レンタルサーバーで .user.ini や .htaccess で設定が上書きされていたり。さらに、ホスティング側で不正なエラー表示を防ぐために display_errors を強制的に無効化していることもあります。サーバー設定が原因の可能性があるため、phpinfo() で読み込まれている設定ファイルや local/master 値を確認することが肝要です。

WordPress で PHP エラーが表示されない時の設定方法

WordPress を使っている場合には、WordPress 固有のデバッグ設定が影響して PHP のエラーが表示されない原因になることがあります。ここでは WordPress 上で確認すべき設定と、その変更方法を詳しく説明します。

WP_DEBUG を有効化する

WordPress の root ディレクトリにある wp-config.php にて define( ‘WP_DEBUG’, true ) を指定することで、WordPress の内部で発生している PHP の警告・エラー・非推奨機能の通知が有効になります。デフォルトでは false になっており、有効にすることでより広い範囲の問題を検知できるようになります。開発環境では必ず有効にしてチェックすることが望ましいです。

WP_DEBUG_DISPLAY と WP_DEBUG_LOG の使い分け

WP_DEBUG が true の場合には、更に二つの定数で出力先を制御できます。
WP_DEBUG_DISPLAY は画面上にエラーを表示するかどうかを決めます。
WP_DEBUG_LOG は errors, warnings, notices 等をファイルに記録するかどうかを制御します。
生産サイトでは WP_DEBUG_DISPLAY を false にして画面表示を抑え、ログを記録させて問題を追跡するのが安全な運用です。これらの設定は wp-config.php の適切な位置(「/* これより下は編集しないでください */」の直前など)に記述することがポイントです。

致命的エラーやパースエラーの表示対策

構文エラー(未閉じのクォートやセミコロン忘れなど)は、PHP がスクリプトを読み込む段階で発生するため、ini_set や display_errors の設定がスクリプトの中であっても反映されないことがあります。こうした場合は php.ini を直接変更するか、サーバー側で制御できる場合は php-fpm.conf や .htaccess に display_errors = On を設定する必要があります。さらに register_shutdown_function や error_get_last を使ってシャットダウン時のエラーをキャッチすることも有効です。

サーバー・環境別の特殊な原因と対処策

PHP が動作している環境(共有サーバー、VPS、ローカル環境など)によって、エラー表示されない原因に特殊性があります。ここではそれぞれの環境でチェックすべきポイントを整理します。

共有ホスティングでの制限

共有サーバーでは、ホスティング会社がセキュリティやパフォーマンスの観点から display_errors を無効にしていたり、PHP 設定の変更を許可していないことがあります。また .htaccess や .user.ini を使って設定を上書きできない制限がある場合もあります。そのような場合はホスティングのサポートに問い合わせて、開発用に一時的に設定を変更してもらえるか確認することが大切です。

PHP-FPM や FastCGI モードでの上書き問題

PHP-FPM や FastCGI 環境では、php.ini の設定とは別にプール設定やプロセス単位のユーザー設定で display_errors がオフにされていることがあります。pool 設定ファイルやプロセスユーザー毎の local php.ini(.user.ini)を確認する必要があります。場合によっては ini_set や .htaccess の記述が無視されるモードになっているので、上位設定の確認が不可欠です。

ローカル開発環境やツールの影響

ローカル環境(XAMPP、MAMP、Docker 等)では設定ファイルの場所を誤っていたり、複数の PHP バージョンがインストールされていて想定外のバージョンが使われていることがあります。また、デバッグツール拡張である Xdebug を使っている場合、エラー出力に関して追加の強制設定やフィルタが存在するためそれらの設定も確認が必要です。

実際に画面にエラーを表示させる手順

ここまでの知見を踏まえて、実際に画面にエラーを表示させるための具体的な手順をまとめます。順番に実行して、どこで効果があるか確認していきましょう。

phpinfo() で設定されている php.ini の場所と現在値を確認

まず、当該サイトで動いている PHP の設定を確認するために、phpinfo() を実行してください。そこから読み込まれている php.ini のパス、local と master の値(display_errors, error_reporting 等)の現在の設定内容をチェックします。これにより、想定していないファイルを編集している可能性や、設定が反映されていない原因を把握できます。

php.ini の編集と再起動

phpinfo で判明した php.ini を見つけたら、display_errors と display_startup_errors を On に、error_reporting を E_ALL(またはより包括的なレベル)に設定します。設定を変更したら Apache や PHP-FPM のサービスを再起動してください。これで致命的エラーも含めて表示されるようになることが多いです。

WordPress の wp-config.php にデバッグ定数を追加/変更

Production 環境と Development 環境で異なる設定をするため、wp-config.php に以下のようなコードを追加します。

<?php
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', true );
@ini_set( 'display_errors', 1 );
@ini_set( 'display_startup_errors', 1 );
error_reporting( E_ALL );

開発中は display を true にして画面出力を確認し、生産環境では display を false にして表示を隠し、ログだけを取る方法で安全な運用が可能です。

致命的エラーをキャッチするためのシャットダウン関数利用

パースエラーや致命的エラーは、通常のエラーハンドラーではキャッチできないことがあります。この場合には register_shutdown_function を使って最後に error_get_last を見て、もしエラーがあれば出力するようなコードを wp-config.php の末尾などに一時的に挿入することで、画面真っ白の原因を特定できます。ただしセキュリティ上、デバッグ終了後はこのコードを削除するかコメントアウトすることを忘れないでください。

エラーが依然表示されない場合に試す追加の対策

上記の方法をすべて試してもなおエラー表示されないケースがあります。その場合に確認をおすすめする追加のポイントを紹介します。

ファイルのパーミッションと所有者の確認

ログを記録する debug.log ファイルやそのディレクトリ(例:wp-content)が PHP プロセスのユーザーから書き込み可能であることを確認してください。権限が不適切だとログファイルが作成できず、表示も記録もされません。一般にディレクトリに 755、ファイルに 644 の権限が標準ですが、環境に応じて調整が必要です。

キャッシュや OPcache の影響

PHP の OPcache やサーバーキャッシュ機能が有効になっていると、編集した php.ini の設定が反映されない、スクリプトの変更が反映されないといった現象が起こり得ます。OPcache のクリアやキャッシュ無効化を行い、確認を行ってみてください。また、ブラウザキャッシュだけでなくサーバーや CDN のキャッシュの可能性も考慮します。

ホスティング会社や環境のログを確認する

WordPress の debug.log に何も出ないけれど画面は真っ白というケースでは、サーバーのエラーログ(Apache や Nginx、PHP-FPM のログファイル)に原因が記録されていることがあります。ホスティングパネルや SSH、FTP でアクセス可能な場合はそれらのログを調べて、致命的エラーやモジュールレベルのエラーを探してください。

プラグインやテーマの競合チェック

テーマやプラグインが WP_DEBUG や display_errors 設定を意図的にオーバーライドしている可能性があります。最近変更を加えたプラグインやテーマを停止してみる、またはデフォルトテーマに切り替えて問題が消えるか確認することが有効です。競合を特定できれば、その部分のコードを修正することでエラー表示を復活させられます。

比較表:一般環境 vs WordPress 環境でのエラー表示設定

項目 一般的な PHP 環境 WordPress 環境
画面にエラーを表示 php.ini や .htaccess や ini_set で display_errors = On WP_DEBUG = true & WP_DEBUG_DISPLAY = true
ログファイルへの記録 log_errors = On + error_log パス確認 WP_DEBUG_LOG = true → wp-content/debug.log等
致命的エラー・パースエラーへの対応 php.ini 直接変更/サーバー再起動/register_shutdown_function functions.php やプラグインなしでテスト/テーマ変更で確認

まとめ

「PHP エラー表示 されない」という現象は一つの原因ではなく、設定ファイル、環境、WordPress のデバッグ設定、サーバーの制限など複合的な要因によって起こります。まず phpinfo() で設定ファイルがどこを読み込んでいるか、display_errors や error_reporting の値を確認し、php.ini の編集と再起動を行うことが基本です。

次に WordPress を使用しているなら WP_DEBUG、WP_DEBUG_DISPLAY、WP_DEBUG_LOG 等の定数を適切に設定し、画面上・ログでエラーを得られるようにします。致命的な構文エラーに対してはシャットダウン関数で最後のエラーを取得する方法もあります。

さらに、ファイル権限、OPcache やキャッシュ、テーマやプラグインの競合、サーバーログの確認などを行うことで、原因が隠れていることが少なくありません。安全かつ効率良くエラー表示を復活し、問題箇所を特定して修正することで、サイトの安定運用が確実になります。

関連記事

特集記事

コメント

この記事へのトラックバックはありません。

最近の記事
  1. GoogleのChromeのHelperがメモリを消費する?重い時の対処法

  2. ワードを使ってエクセルから年賀状の宛名を印刷!差し込み設定のコツ

  3. スマホからスクラッチにサインインする方法!子供でも簡単な基本操作

  4. フロントエンジニアとコーダーの違いとは?仕事内容やスキルの差を解説

  5. エクセルの足し算で1円合わない?原因と端数処理でピタリと合わせる術

  6. Visual Studioのクラスダイアグラムの使い方!設計を見える化

  7. エクセルで縦の合計を素早く出す!オートサム機能を使って計算を効率化

  8. 静的な型付けの言語とは?メリットと動的型付けとの違いを徹底比較

  9. プログラミングのポインタとは?わかりやすく図解でメリットを解説!

  10. Mac版クリッピーの便利な使い方!作業効率が爆上がりする神ツール

  11. CSSのoutlineとborderの違いとは?使い分けのポイント解説

  12. セマンティックコーディングとは?意味やメリットをわかりやすく解説

  13. C#と.netのframework入門!基礎知識から開発のスタートまで

  14. GoogleのDriveが表示されない?同期エラーの原因とすぐ直る解決法

  15. C#のフレームワークとは?開発を効率化するおすすめの種類を徹底比較

  16. エクセルで足し算が合わない?誤差の原因と表示形式を正しく直す方法

  17. エクセルで縦一列の足し算ができない?合計が出ない原因と正しい解決法

  18. PHPのintvalとは?intとの違いや正しい使い方を徹底解説

  19. C#のGUI開発向けフレームワークの種類!特徴と選び方を徹底解説

  20. C#のthrowとは?例外を意図的に発生させる正しい使い方とエラー処理

アーカイブ
TOP
CLOSE