PHP 错误处理
一、使用 die() 终止程序
if(!file_exists('file.txt')){ die('file.txt不存在'); // 如果不加判断,文件又不存在的话就会报错, }else{ $file = fopen('file.txt','r'); }
二、创建自定义错误处理函数
语法:
error_function(error_level,error_message,error_file,error_line)
参数 | 描述 |
---|---|
error_level |
必需。为用户定义的错误规定错误报告级别。必须是一个值数。 参见下面的表格:错误报告级别。 |
error_message | 必需。为用户定义的错误规定错误消息。 |
error_file | 可选。规定错误在其中发生的文件名。 |
error_line | 可选。规定错误发生的行号。 |
值 | 常量 | 描述 |
---|---|---|
2 | E_WARNING | 非致命的 run-time 错误。不暂停脚本执行。 |
8 | E_NOTICE |
Run-time 通知。 脚本发现可能有错误发生,但也可能在脚本正常运行时发生。 |
256 | E_USER_ERROR | 致命的用户生成的错误。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_ERROR。 |
512 | E_USER_WARNING | 非致命的用户生成的警告。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_WARNING。 |
1024 | E_USER_NOTICE | 用户生成的通知。这类似于程序员使用 PHP 函数 trigger_error() 设置的 E_NOTICE。 |
4096 | E_RECOVERABLE_ERROR | 可捕获的致命错误。类似 E_ERROR,但可被用户定义的处理程序捕获。(参见 set_error_handler()) |
8191 | E_ALL |
所有错误和警告,除级别 E_STRICT 以外。 (在 PHP 6.0,E_STRICT 是 E_ALL 的一部分) |
set_error_handler(处理错误的函数名,错误级别)
function captureError($error_number,$error_message,$error_file,$error_line){ switch($error_number){ case 2: $error_level = "Warning,非致命的run-time错误"; break; case 8: $error_level = "Notice,可能有错误发生,也可能在脚本运行时发生"; break; case 256: $error_level = "User error,用户输入信息有误,脚本出现致命错误"; break; case 512: $error_level = "User Warning,用户输入信息可能有误(E_USER_WARNING)"; break; case 1024: $error_level = "User notice,请检查用户所输入的信息是否有误"; break; case 4096: $error_level = "Recoverable error,出现可捕获的致命错误"; break; case 8191: $error_level = "All error,显示所有错误和警告"; break; } echo "文件<span style='color:red;'>$error_file</span>的第<span style='color:red;'>$error_line</span>行发生了<span style='color:red;'>$error_level</span>的错误,错误详情:<span style='color:red;'>$error_message</span></br>"; die('脚本已终止运行!请根据错误提示排除错误。'); } set_error_handler("captureError",E_ALL); echo $name; //文件名为E:\www\test\admin.php的第31行发生了Notice,可能有错误发生,也可能在脚本运行时发生的错误,错误详情为:Undefined variable: name