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	estadmin.php的第31行发生了Notice,可能有错误发生,也可能在脚本运行时发生的错误,错误详情为:Undefined variable: name
原文地址:https://www.cnblogs.com/chrdai/p/6378792.html