コード例 … Warningエラー

PHP用語集

カテゴリー: register_shutdown_function  閲覧数:693 配信日:2014-03-27 19:45


0除算


・本来ならばset_error_handlerで補足できるWarnigエラーを、敢えてregister_shutdown_functionで補足
・処理が最後まで到達していることは、Bye が表示されていることからも(それもWarningエラーより前)確認できる
function my_error_handler ( $errno, $errstr, $errfile, $errline, $errcontext ) {
//     echo "[$errno] $errstr $errfile($errline)\n<br />";
    echo "[$errno] $errstr ($errline)\n<br />";
}

function my_shutdown_handler(){
    $isError = false;
    if ($error = error_get_last()){//最後に発生したエラーについての情報を取得。ここでは、$i = 5/0;//0 除算でエラー発生→Warning error:
         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:
              $isError = true;
                     break;
         case E_WARNING://set_error_handlerで補足できるエラーを、敢えてregister_shutdown_functionで補足
              $isError = true;
                     break;
             }
        }
    if ($isError){
         echo my_error_handler(
              $error['type'],
              $error['message'],
              $error['file'],
              $error['line'],
              null );
    }
}

ini_set( 'display_errors' , 0 );//エラー出力しない
error_reporting( E_ALL );// 全ての PHP エラーを表示(但し何を持って「全ての PHP エラー」と見做すかはバージョンにより異なる)
//set_error_handler( 'my_error_handler', E_ALL );
register_shutdown_function( 'my_shutdown_handler' );

echo "Hello\n<br />";
$i = 5/0;//0 除算でエラー発生→Warning:

//foo();//未定義関数でエラー発生→Fatal error:

//foo(;//Parse error: syntax error, unexpected ';', expecting ')'

//echo $hoge//
//echo $foo;//Parse error: syntax error, unexpected T_ECHO, expecting ',' or ';'

echo "Bye\n<br />";

・処理結果
Hello
Bye
Back to top[2] Division by zero (62)

・同じこと(Warningエラー捕捉)を、set_error_handler()で行なうと、スクリプト処理が完了したときに行なう処理ではないため、エラーメッセージは、Bye の前に表示される
function my_error_handler ( $errno, $errstr, $errfile, $errline, $errcontext ) {
//     echo "[$errno] $errstr $errfile($errline)\n<br />";
    echo "[$errno] $errstr ($errline)\n<br />";
}

ini_set( 'display_errors' , 0 );//エラー出力しない
error_reporting( E_ALL );// 全ての PHP エラーを表示(但し何を持って「全ての PHP エラー」と見做すかはバージョンにより異なる)
set_error_handler( 'my_error_handler', E_ALL );
//register_shutdown_function( 'my_shutdown_handler' );

echo "Hello\n<br />";
$i = 5/0;//0 除算でエラー発生→Warning:
//foo();//未定義関数でエラー発生→Fatal error:
echo "Bye\n<br />";

・処理結果
Hello
[2] Division by zero (35)
Bye


週間人気ページランキング / 4-10 → 4-16
順位 ページタイトル抜粋 アクセス数
1 Parse error: syntax error, unexpected 'public' (T_PUBLIC) | Parse error(エラーメッセージ) 12
2 ブラウザを閉じたらセッションデータはどうなるの? | セッション 11
3 コード例 … 「例外処理」はネストすることができる 9
4 Warning: Unexpected character in input: '\' (ASCII=92) state=1 in ○○.php on line △△ | Warning(エラーメッセージ) 4
5 Warning: mb_convert_encoding(): Unable to detect character encoding | Warning(エラーメッセージ) 3
5 PHPで定数を定義する方法は2種類ある / 配列定数の定義 3
5 セッション管理が必要な理由は、HTTPプロトコルには状態を保持する機能がないため | セッション 3
5 curl で Cookie を使用する 3
6 PHPでcurlを使用するためには?/ 2.オプション設定 / curlでPOST送信 2
6 Fatal error(エラーメッセージ) カテゴリー 2
6 array_map | 配列 2
6 ブラウザを閉じたらセッションデータはどうなるの? | セッション 2
6 ガベージコレクション | 機能 2
6 ( ! ) Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined | Fatal error(エラーメッセージ) 2
6 set_error_handler | 例外処理(制御構造) 2
6 インターフェイス | クラスとオブジェクト 2
6 型の種類 | 型 2
6 Fatal error: Uncaught Error: Call to a member function modify() on string | Fatal error(エラーメッセージ) 2
6 Fatal error: Using $this when not in object context in /○○.php on line △△ | Fatal error(エラーメッセージ) 2
7 セッション単位 | セッション 1
2024/4/17 1:01 更新
指定期間人気ページランキング / 2020-5-28 → 2024-4-16
順位 ページタイトル抜粋 アクセス数
1 PHP用語 6617
2 ブラウザを閉じたらセッションデータはどうなるの? | セッション 2159
3 Parse error: syntax error, unexpected 'public' (T_PUBLIC) | Parse error(エラーメッセージ) 2079
4 ブラウザを閉じたらセッションデータはどうなるの? | セッション 1539
5 【テスト投稿】テスト | 1129
6 セッション管理が必要な理由は、HTTPプロトコルには状態を保持する機能がないため | セッション 907
7 Fatal error: Access level to ▲::$△ must be protected (as in class ●) or weaker | Fatal error(エラーメッセージ) 724
8 Fatal error: Uncaught Error: Call to a member function modify() on string | Fatal error(エラーメッセージ) 713
9 PHPで定数を定義する方法は2種類ある / 配列定数の定義 708
10 Fatal error: require_once(): Failed opening required 'PEAR.php' | Fatal error(エラーメッセージ) 703
11 インターフェイス | クラスとオブジェクト 684
12 定数 669
13 コード例 … 「例外処理」はネストすることができる 666
14 Fatal error: Uncaught RuntimeException: SplFileObject::__construct(): failed to open stream: Permission denied in | Fatal error(エラーメッセージ) 647
15 メンバー | クラスとオブジェクト 637
16 curl で Cookie を使用する 629
17 Fatal error: Uncaught HeadlessChromium\Exception\OperationTimedOut: Operation timed out (3sec) in | Fatal error(エラーメッセージ) 602
18 Warning: include() [function.include]: Failed opening '**.php' for inclusion (in | Warning(エラーメッセージ) 589
19 ( ! ) Fatal error: Uncaught PDOException: SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column | Fatal error(エラーメッセージ) 562
20 セッション名 | セッション 533
2024/4/17 1:01 更新