php 错误机制

来源:互联网 发布:日本js蓝光眼镜 编辑:程序博客网 时间:2024/06/05 23:54
<?php/* * 20141230日自己总结的关于php error 的知识和最佳实践 *  * 先从错误产生流程说起:  * php脚本运行--->脚本出错或主动报错---->触发php error 机制 * ---->机制判断:是否有自定义的错误处理机制?--->(是)使用自定义的机制---->(否)使用php内部的错误机制 *---->根据错误处理情况,决定脚本是退出还是继续运行 *  * 再说细节: *  * ----主动报错---- *trigger_error(‘我的报错信息’,【错误级别】); *脚本中,只要执行了这个函数,就会触发上面流程,比如:我传个参数,如果比3大,我就报错! *if$var>3){ *  trigger_error(‘数太大了,换一个’,E_USER_WARNING); *} *  * ----自定义错误机制------ * 我们可以单独写成一个自定义错误处理文件error_handler.php,然后每段脚本都加载它,这样我们就可以用自己的错误机制,而不用php内部的了! * 如果这个文件写的好,对开发来说是非常有利的! *  * 文件推荐写法: * error_handler.php *  * 先根据错误级别,给每个 级别写 上自定义处理函数 *  function E_ERROR_handler($error_level,$error_message,【$error_file,$error_line,$error_context】){ *      函数里面写错误处理代码! *      一般会写的东西: *                  错误发生的时间:$time=date("Y-m-d H:i:s"); *                  错误级别(数值):$error_level; *                  传过来的错误信息:$error_message; *                  错误发生的文件名:$error_file; *                  错误发生的行数:$error_line; *                  错误发生时涉及到的变量数组:$error_context; *      你可以根据$error_level,或者$error_message的值,来决定如何处理错误 *                  if($error_level==8){....} *                  if($error_message=="数据库错误"){...} *      这些东西,你可以选择,将它们打印在屏幕上,然后退出脚本/继续脚本 *                  echo .....;或者exit(....); *      但是我建议你将它们都分门别类的记录下来;首先,将上面信息链接成字符串  *                  $error_log; *      然后,再存到文件中去! *                  error_log($error_log;3,'/var/php/error_log/E_ERROR_log.log'); *  } *   function E_WARNING_handler(){....} *   function E_NOTICE_handler(){....} *   ..... * 再将每个自定义好的函数,根据错误处理级别,注册到php error 处理机制中去! *  set_error_handler('E_ERROR_handler',E_ERROR); *  set_error_handler('E_NOTICE_handler',E_NOTICE); *  ..... *  * ----题后话----- * 错误处理的原理和形式是不难的,难点是你如何设计自定义错误处理的handler函数 * -----附录(错误级别)------值       常量                      描述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 的一部分) *  * ----附录(php.ini关于error的设置)----- * 开发环境: * error_reporting=E_ALL * display_errors=On * html_errors=On * log_errors=Off * 上线运营的系统: * error_reporting=E_ALL & ~E_NOTICE * display_errors=Off * html_errors=Off * log_errors=On * error_log="/var/log/httpd/my-php-error.log" * ignore_repeated_errors=on * ignore_repeate_source=on *  *  *  *  *  *  *  *  * */
0 0