PHPのエラーの種類と報告
notice、warning、fatal errorと、error_reportingのレベルを理解します
「PHPのエラーの種類と報告」はCoddyKit上の無料PHP Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPHP Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 PHP Academyコースには全4レッスンが含まれています。
PHPのエラーの種類
PHP には、重大度の異なる複数のエラーがあります。
- Notice — 軽微な問題。実行は継続する
- Warning — 致命的ではない問題。実行は継続する
- Fatal Error — 実行が直ちに停止する
- Parse Error — 構文エラー。実行前に停止する
- Deprecated — その機能は削除される予定である
error_reporting()
error_reporting() で、PHP が報告するエラーを制御します。
<?php
// Show all errors (development)
error_reporting(E_ALL);
// Hide notices and deprecated
error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED);
// Production: no display, log to file
error_reporting(E_ALL);
ini_set('display_errors', '0');
ini_set('log_errors', '1');
ini_set('error_log', '/var/log/php_errors.log');display_errors と log_errors
エラー処理に関する php.ini の主な設定:
display_errors = On— ブラウザーにエラーを表示します(開発時のみ)display_errors = Off— ユーザーからエラーを隠します(本番環境)log_errors = On— error_log ファイルに書き込みますerror_log = /path/to/file— ログの保存場所を指定します
本番環境では、ユーザーにエラーを表示しないでください。
trigger_error でエラーを発生させる
trigger_error() を使って独自の PHP エラーを生成します。
<?php
function divide(int $a, int $b): float {
if ($b === 0) {
trigger_error('Division by zero', E_USER_WARNING);
return 0.0;
}
return $a / $b;
}
echo divide(10, 0); // triggers E_USER_WARNINGカスタムエラーハンドラー
set_error_handler() を使って独自のエラーハンドラーを登録します。
<?php
set_error_handler(function(int $errno, string $errstr, string $file, int $line): bool {
$message = "[$errno] $errstr in $file:$line";
error_log($message);
if ($errno === E_USER_ERROR) {
http_response_code(500);
die('Internal error — please try again later');
}
return true; // don't execute PHP internal error handler
});
trigger_error('Custom error message', E_USER_ERROR);よくあるエラーの原因
PHP エラーの典型的な原因:
- 未定義の配列キーにアクセスする → Notice
- false を返す関数を呼び出し、その結果を使用する → Warning
- 未定義の関数を呼び出す → Fatal Error
- セミコロンがない → Parse Error
- ゼロで除算する → Warning(INF または NAN を返します)
エラー抑制演算子 @
@ 演算子は、1つの式から発生するエラーを抑制します。ただし、使用は避け、適切なエラー処理を行ってください。
<?php
// Bad: hides errors silently
$result = @file_get_contents('missing.txt');
// Good: check explicitly
$result = file_get_contents('missing.txt');
if ($result === false) {
// handle the error
echo 'File not found';
}PHP 8 の JIT とエラーの変更
PHP 8 では、エラー処理がより厳格になりました。
- 多くの警告が TypeError や ValueError に変更されました
- 単純なチェックでは、正規表現の代わりに
str_contains/starts_with/ends_withを使用します - 誤った引数の型を渡すと、デフォルトで TypeError がスローされます
実行時の ini_set
実行時に php.ini の設定を上書きします。
<?php
// Display errors during development
if (getenv('APP_ENV') === 'development') {
ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
error_reporting(E_ALL);
} else {
ini_set('display_errors', '0');
ini_set('log_errors', '1');
error_reporting(E_ALL);
}エラーレベルの確認
ビット単位の AND 演算子でエラーレベルを検出します。
<?php
$level = error_reporting();
if ($level & E_NOTICE) {
echo 'Notices are reported';
}
if ($level & E_WARNING) {
echo 'Warnings are reported';
}
// Check specific error types
echo (E_ALL & E_NOTICE) ? 'E_ALL includes E_NOTICE' : 'no';エラーログのベストプラクティス
適切なエラーログの習慣:
- 本番環境では常にエラーを記録します
- ユーザー ID、リクエスト URL、タイムスタンプなどのコンテキストを含めます
- 解析しやすいように、構造化ログ(JSON)を使用します
- ディスク容量が使い果たされないよう、ログファイルをローテーションします
- ELK、Datadog、Papertrail などのツールでログを監視します
理解度チェック
実行を直ちに停止させる PHP のエラータイプはどれですか。
まとめ:PHP のエラー報告
エラー処理の要点:
- エラータイプ:Notice、Warning、Fatal、Parse、Deprecated
error_reporting()でレベルを設定します- 本番環境では表示をオフにし、ログをオンにします
set_error_handler()でカスタムハンドラーを登録します- 本番コードでは
@でエラーを抑制しないでください
よくある質問
「PHPのエラーの種類と報告」レッスンは無料ですか?
はい。「PHPのエラーの種類と報告」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、PHP Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 PHP Academyコースには全4レッスンが含まれています。
「PHPのエラーの種類と報告」で何を学びますか?
notice、warning、fatal errorと、error_reportingのレベルを理解します ブラウザで直接実行するハンズオンコードでPHP Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
PHP Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのPHP Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「PHPのエラーの種類と報告」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このPHP Academyレッスンでコードを書いて実行できますか?
はい。すべてのPHP Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- PHPのエラーの種類と報告
- Try、Catch、Finally
- カスタム例外の作成
- エラーのログ記録とベストプラクティス