開発環境・コマンドライン

PHPエラーが表示されない原因と対策方法について解説

PHPのエラーが表示されない場合、原因は設定やコードの問題である可能性があります。

たとえば、PHP設定ファイルのphp.inidisplay_errorsが無効になっているか、エラーレベルの設定が適切でないことが考えられます。

本記事では、エラー表示が行われない場合のチェックポイントや対策方法について、分かりやすく解説します。

エラー表示設定の確認

エラーが表示されない場合、まずは基本となるPHP設定ファイルの内容を確認することが必要です。

ここではphp.iniの設定を中心に、表示用のオプションについて確認する方法を紹介します。

php.iniの設定チェック

php.iniファイルはPHPの動作設定を管理するファイルです。

ファイルの内容や指定されている各オプションが意図通りになっているか確認しましょう。

display_errorsの状態確認

display_errorsオプションは、エラーを画面上に表示するかどうかを決める設定です。

この値がOnになっていない場合、エラーが出力されないため、まずはこちらを確認してください。

サンプルコードとして、phpinfo()関数を利用して現在の設定状態を確認する方法を紹介します。

<?php
// phpinfo()関数で現在の設定状況を確認するサンプルコード
phpinfo();
?>
// サンプルコードを実行した場合、ブラウザ上にPHPの設定情報が表示されます。
// 上部または該当部分で "display_errors => On" 等の記述が確認できればOKです。

error_reportingレベルの指定確認

error_reportingオプションは、どのレベルのエラーを報告するかを制御しています。

例えば、全てのエラーを表示する場合は以下のように設定されている必要があります。

<?php
// エラー報告レベルをすべてに設定する例
error_reporting(E_ALL);
// 現在のエラー報告レベルを出力するコード
echo '現在のerror_reportingレベル: ' . error_reporting();
?>
// サンプル出力例
// 現在のerror_reportingレベル: 32767

エラー表示がされない場合、設定ファイルと実行時の設定値が一致しているか確認してください。

実行時設定の見直し

php.iniの設定だけではなく、実行時にini_set関数などを利用して設定を上書きしている場合があります。

ここではその変更状況を確認する方法について解説します。

ini_set関数による変更の確認

ini_setを使うことで、実行中に一時的に設定を変更することができます。

意図しない設定変更が行われているか確認するため、スクリプト内での設定状況を検証しましょう。

実行時設定との整合性チェック

実行時に設定された内容が、開発時に想定している状態と一致しているかチェックするため、ini_get関数を利用して設定値を出力します。

<?php
// 実行時に変更された設定値の確認サンプルコード
// ini_setでdisplay_errorsの設定を変更している例
ini_set('display_errors', 'On');
// ini_get関数で現在の設定値を取得
$currentDisplayErrors = ini_get('display_errors');
echo '現在のdisplay_errorsの状態: ' . $currentDisplayErrors;
?>
// サンプル出力例
// 現在のdisplay_errorsの状態: On

このように、実行時の設定が想定通りであるかを確認することで、エラーが表示されない原因のひとつを特定できます。

エラーログ出力の確認

エラーが表示されない場合でも、サーバー側ではエラーログに記録されている可能性があります。

ここではエラーログの設定内容を重点的に確認します。

error_logパラメータの設定検証

php.ini内のerror_logパラメータは、エラーの出力先を設定するものです。

設定されたパスやファイル名が正しいか、また書き込み権限が設定されているかを確認してください。

ログ出力先の権限とパス確認

PHPがエラーログを書き込む先のディレクトリやファイルに、適切な書き込み権限があるかをチェックします。

以下のコードは、エラーログにサンプルのエラーを書き出し、出力先設定が確認できる例です。

<?php
// error_log関数を利用してエラーログに書き出すサンプルコード
// サンプルエラーをログに記録する
error_log('これはテスト用のエラーメッセージです。');
// 現在設定されているerror_logのパスを取得して表示
$logPath = ini_get('error_log');
echo '現在のエラーログ出力先: ' . $logPath;
?>
// サンプル出力例
// 現在のエラーログ出力先: /var/log/php_errors.log

設定されたパスが実際に存在し、PHPが書き込み可能な状態かどうかをシステム管理者と連携して確認してください。

コード内のエラー制御確認

コード内でエラー出力を制御する機能が使用されている場合、結果としてエラーが表示されなくなることがあります。

特にエラー抑制演算子@の使用には注意が必要です。

エラー抑制演算子「@」の使用検証

@演算子は、エラー出力を抑制するために使用されます。

無意識に利用されている箇所を探し、その影響を検証してください。

コードレビューなどで、該当部分の洗い出しが必要です。

該当部分の洗い出しと影響確認

サンプルコードとして、@演算子を使用した場合と使用していない場合の違いを確認する例を示します。

<?php
// 数値を0で割る処理をエラー抑制演算子付きで実行する例
// @を使用してエラー出力を抑制
$result = @ (10 / 0);
echo '計算結果 (@使用): ' . $result . "\n";
// @を使用しない場合
$result2 = (10 / 0);
echo '計算結果 (@未使用): ' . $result2;
?>
// サンプル出力例
// 計算結果 (@使用):
// Warning: Division by zero in /path/to/script.php on line XX
// 計算結果 (@未使用):

この例では、@演算子を使用した場合、エラーメッセージが表示されず、結果が空になることが確認できます。

実際のコード内で@が多用されている場合、エラーの原因特定が難しくなるため注意してください。

環境固有の確認事項

開発環境と本番環境、またはローカル環境とサーバー環境では、設定内容が異なる場合があります。

環境ごとの違いを明確にしておくことで、エラー表示の問題を解消する手がかりになります。

ローカルとサーバー環境の設定差異チェック

ローカル環境で正しくエラーが表示されるのに、本番環境で表示されない場合、各環境間の設定差異が原因である可能性があります。

設定ファイルや実行時の変更、php.iniの内容などを比較しましょう。

各環境での設定適用状況の比較

各環境でphpinfo()関数を実行し、以下の点を比較します。

display_errorsおよびerror_reportingの設定

error_logの出力先パスと権限

・その他、実行時に上書きされる設定

サンプルコードとして、両環境での設定を確認するためのスクリプト例を示します。

<?php
// 現在の環境設定を出力するサンプルコード
// display_errorsとerror_reportingの確認
echo 'display_errors: ' . ini_get('display_errors') . "\n";
echo 'error_reporting: ' . error_reporting() . "\n";
// error_logの確認
echo 'error_log: ' . ini_get('error_log') . "\n";
// PHPの詳細な設定情報(必要に応じて)
// phpinfo();
?>
// サンプル出力例(環境1)
/*
display_errors: On
error_reporting: 32767
error_log: /var/log/php_errors_local.log
*/
// サンプル出力例(環境2)
// ※実際の本番環境では「display_errors: Off」となっているなど、設定差異が確認できます。

環境間の設定の違いを把握することで、エラーが表示されない原因の特定に役立てることができます。

まとめ

この記事では、PHPのエラー表示がされない原因と対策方法を解説しました。

全体として、php.iniの設定確認、実行時の変更、エラーログ出力、コード内のエラー抑制、環境間の設定差異を順次確認する方法を整理しています。

これらの確認を行い、適切な設定変更を実施してエラーチェック体制を強化してください。

関連記事

Back to top button