现在的位置: 首页 > 综合 > 正文

php error 处理机制

2017年12月05日 ⁄ 综合 ⁄ 共 2231字 ⁄ 字号 评论关闭
</pre><pre name="code" class="php">


<?php
/*
 * 2014年12月30日自己总结的关于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
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 * 
 * */

抱歉!评论已关闭.