发布时间:2020/05/26 作者:天马行空 阅读(1444)
1、是否要显示错误:display_errors
如果要提示出错误,我们需要将display_errors设置成On,只有设置成On之后,错误才会提示出来。
有两种方式:
第一种,修改php.ini,直接设置display_errors=On;
第二种,在程序中使用ini_set('display_errors','On')进行设置;
2、需要报告哪些错误:error_reporting
error_reporting的作用是设置报错的错误等级,有些错误如果觉得没有必要报出来就可以通过这个设置成不报错。
同样也有两种设置方式:
第一种,修改php.ini,直接设置error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT;
第二种,在程序中使用error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT)进行设置;
常用的错误等级设置:
error_reporting(0); //禁用错误报告 error_reporting(E_ERROR | E_WARNING | E_PARSE);//报告运行时错误 error_reporting(E_ALL); //报告所有错误 error_reporting(E_ALL ^ E_NOTICE); //除E_NOTICE报告所有错误,是在php.ini的默认设置 error_reporting(-1); //报告所有 PHP 错误 error_reporting(3); //不报E_NOTICE error_reporting(11); //报告所有错误 ini_set('error_reporting', E_ALL); // 和 error_reporting(E_ALL); 一样 error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);//表示php错误,警告,语法错误,提醒都返错。
那么,php具体有哪些错误等级呢?我们来看看:
值 | 常量 | 描述 |
1 | E_ERROR | 致命的运行错误。错误无法恢复,暂停执行脚本 |
2 | E_WARNING | 运行时警告(非致命性错误)。非致命的运行错误,脚本执行不会停止 |
4 | E_PARSE | 编译时解析错误。解析错误只由分析器产生 |
8 | E_NOTICE | 运行时提醒(这些经常是你代码中的bug引起的,也可能是有意的行为造成的。) |
16 | E_CORE_ERROR | PHP启动时初始化过程中的致命错误 |
32 | E_CORE_WARNING | PHP启动时初始化过程中的警告(非致命性错) |
64 | E_COMPILE_ERROR | 编译时致命性错。这就像由Zend脚本引擎生成了一个E_ERROR |
128 | E_COMPILE_WARNING | 编译时警告(非致命性错)。这就像由Zend脚本引擎生成了一个E_WARNING警告 |
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集) |
2048 | E_STRICT | 编码标准化警告。允许PHP建议如何修改代码以确保最佳的互操作性向前兼容性 |
4096 | E_RECOVERABLE_ERROR | 开捕致命错误。这就像一个E_ERROR,但可以通过用户定义的处理捕获(又见set_error_handler()) |
8191 | E_ALL | 所有的错误和警告(不包括 E_STRICT) (E_STRICT will be part of E_ALL as of PHP 6.0) |
3、如果不想在页面上报错,但又想把错误以日志的方式记录下来,怎么办?
这种情况,可以使用set_error_handler('errorHandler',E_ALL | E_STRICT)来自定义系统的错误处理函数,之后就可以在errorHandler这个自定义函数中自由发挥了。
/** * 错误处理 * @param int $err_no 错误代码 * @param string $err_msg 错误信息 * @param string $err_file 错误文件 * @param int $err_line 错误行号 * @return string */ function errorHandler($err_no = 0, $err_msg = '', $err_file = '', $err_line = 0) { writeLog($err_no.' '.$err_msg.' '.$err_file.''.$err_line."\r\n",'error.log'); }
注意:使用set_error_handler这个函数之后error_reporting设置的将全部失效,那么有什么办法可以解决这个问题呢。当然是有的,只需要在set_error_handler这个函数的第二个参数中去重新设置一遍就能搞定了。