PHP错误处理

php.ini配置文件中可以控制php的错误显示状态,php.ini中有一个专门的配置项:display_errors,这个选项设置是否将错误信息输出到网页,或者对用户隐藏隐藏而不显示。如果没有修改服务器php.ini的状态权限时可以使用ini_set()修改,然后用ini_get()获取参数的值。我们要掌握的错误分为七个级别,按照严重级别从高到低分别是:
1.E_ERROR  错误,文件直接中断。
2.E_WARNING  警告,问题比较严重。但是还会继续向下运行。
3.E_NOTIC  提示,有些小问题不会影响程序。常发生在项目未定义。notice一般来说可以不用管,但是有的时候它会影响PHP的执行效率。
4.E_PARSE  编译时语法解析错误。解析错误仅仅由分析器产生,一般指的是语法错误。
5.E_ALL 所有的错误。
6.E_STRICT  启用PHP对代码的修改建议,以确保代码具有最佳的互操作性和向前兼容性。
7.E_DEPRECATED  启用后将会对在未来版本中可能无法正常工作的代码给出警告。
还有一些错误是只需要了解的错误,是从ERROR、WARNING、NOTICE扩展出来的错误项。比如E_CORE_ERROR、E_CORE_WARNING、E_COMPILE_WARNING这几个都是由于引擎而产生的错误,还有E_USER_ERROR、E_USER_WARNING、E_USER_NOTICE这些用户自定义的错误项。
然后error_reporting是错误报告,在php.ini也有一个参数,这个参数决定了php引擎记录、报告、显示哪些错误类型。
如果想显示所有错误可以改成:error_reporting =E_ALL,如果显示错误,但是排除提示、兼容性和未来兼容性。可以写为:error_reporting=E_ALL&-E_NOTICE&~E_STRICT&~E_DEPRECATED
我们还可以用@屏蔽某一行的错误。

有时候我们要收集错误,但是又不能让用户看到,这个时候我们就需要错误记录日志了。将错误收集到日志系统中,我们需要配置php.ini,log_errors调整是否开启日志记录,log_errors_max_len是修改单行错误最大记录长度,error_log配置错误日志记录在什么地方,为此还专门有一个error_log函数,这个函数可以把错误信息发送到服务器的错误日志或者一个文件里。所以error_log()函数有三个参数,错误消息,错误消息类型,存储地址。

由于错误类型太多,并且每个人的错误类型有可能不一样,所以我们还可以自定义一个错误处理函数,用户自定义错误经常用到这两个函数:set_error_handle()函数和triggle_error(),第一个函数可以将一个函数绑定为错误处理函数,第二个函数可以使函数产生一个用户级别的错误信息。比如说:
<code lang="php">
//定义一个自定义的错误处理函数
function customError($errno, $errstr, $errfile, $errline) {
   //输出错误消息
   echo "<b>Custom error:</b> [$errno] $errstr<br />";
   //输出错误文件和错误行
   echo "Error on line $errline in $errfile<br />";
   echo "Ending Script";
   //中止程序运行
   exit;
}

//使用set_error_handler 绑定用户自定义函数
set_error_handler("customError");


$test=2;

//触发自定义错误
if ($test > 1) {
   trigger_error("A custom error has been triggered");
}
?>
</code>
我们可以这样去定义一个错误处理函数,set_error_handle()函数可以接受一个回调函数作为错误处理函数。回调函数就是传入的、后又被调用的函数。这样说可能不太容易理解,以下是为了方便理解的代码:
<code lang="php">
    function fortwo($x){
    return 2*$x;
}

function forfour($x){
    return 4*$x;
}

$i=call_user_func('fortwo',1);
echo '<br/>'.$i;
</code>
由上面可知,我们可以设置两个函数,然后通过call_user_func()函数来传入要调用的函数名来调用函数,然后后面输入需要调用的函数所需要的参数,这样就可以随机调用了。
以上就是对于php的错误处理了。