エラー対策の目的
状態:-
閲覧数:3,318
投稿日:2016-06-21
更新日:2016-08-03
大きく2つに分かれる
1. デバッグ→エラー箇所及びその原因を突き止める
2. 例外処理を行い、エラー発生時における不具合を防ぐ
※何れにせよ、「E_WARNING」「E_NOTICE」「E_STRICT」以外は、最終的には処理中断を防ぐことは出来ない
エラーは大きく3つに分類することができる
エラー分類一覧
・エラーを3つに分類
1. デバッグ→エラー箇所及びその原因を突き止める
2. 例外処理を行い、エラー発生時における不具合を防ぐ
※何れにせよ、「E_WARNING」「E_NOTICE」「E_STRICT」以外は、最終的には処理中断を防ぐことは出来ない
エラー分類
エラーは大きく3つに分類することができる
エラー分類一覧
・エラーを3つに分類
エラー発生のタイミング | エラーの種類 | 出力エラーメッセージ | 内容 | 実行継続の可否 |
---|---|---|---|---|
スクリプト実行中 | 警告・注意 | Warning Noticeなど | 下記以外 | 実行は継続 |
スクリプト実行中 | 致命的 | Fatal Error など | PHPの内部的なメモリ確保に関するエラー | 実行は中断 |
コンパイル中 | 解析・構文 | Parse error syntax error | PHPの文法を間違っている場合 | プログラムのコンパイル時にエラーが発生するため、1行も実行されることなく終了 |
エラーの種類
主なエラー
よくあるエラーの種類
・一覧
- | 出力エラーメッセージ | 内容 | 処理継続 | 捕捉 |
---|---|---|---|---|
E_ERROR | Fatal error: | 実行時の重大なエラー(未定義関数の使用など) | × | - |
E_WARNING | Warning: | 実行時の警告(関数へ渡す引数が不正など) | ○ | - |
E_PARSE | Parse error: | 実行以前の問題(文法ミスなど) | × | - |
E_NOTICE | Notice: | 実行時の通知(未定義変数の参照など) | ○ | - |
E_STRICT | Strict Standards: | 厳格チェックの通知(PHP5) | ○ | - |
よくあるエラー例
Warning
一覧
- | メッセージ | 内容 | 処理継続 | 捕捉 |
---|---|---|---|---|
ファイルエラー | - | ファイルオープンエラー | ○ | set_error_handler() register_shutdown_function() |
0 除算 | Division by zero | 0 除算 | ○ | set_error_handler() register_shutdown_function() |
引数不正 | array_reverse() expects parameter 1 to be array, string given | 関数へ渡す引数が不正。引数として、配列を渡すべきなのに、文字列を渡している | ○ | set_error_handler() register_shutdown_function() |
Fatal error
一覧
- | メッセージ | 内容 | 処理継続 | 捕捉 |
---|---|---|---|---|
未定義関数 | - | 未定義関数呼び出し | × | register_shutdown_function() |
例外 | Uncaught exception | キャッチされない例外 | × | register_shutdown_function() |
Parse error
一覧
- | メッセージ | 内容 | 処理継続 | 捕捉 |
---|---|---|---|---|
セミコロン | syntax error, unexpected T_ECHO, expecting ',' or ';' | セミコロン(;)の付け忘れ | × | × |
括弧 | syntax error, unexpected ';', expecting ')' | 括弧の対応があっていない | × | × |
以下のエラータイプは、ユーザ定義の関数では扱えません
ユーザ定義関数では取り扱い不可なエラータイプ
set_error_handler()は利用できない。register_shutdown_function()を利用
・E_ERROR
・E_PARSE
・E_CORE_ERROR
・E_CORE_WARNING
・E_COMPILE_ERROR
・E_COMPILE_WARNING
・set_error_handler() がコールされたファイルで発生した 大半の E_STRICT
set_error_handler() と register_shutdown_function() の両方を利用する場合
register_shutdown_function() の呼び出し先関数にて、set_error_handler()で捕捉できないエラー定数のみを指定
<記述例>
switch($error['type']){
case E_ERROR://エラー定数(エラー出力レベルビット値)
case E_PARSE:
case E_CORE_ERROR:
case E_CORE_WARNING:
case E_COMPILE_ERROR:
case E_COMPILE_WARNING:
Fatal error: Uncaught exception 'ImagickException' with message 'WriteBlob Failed
Desktop applications only support the oauth_callback value 'oob'