php错误处理--php基础最详细教程

原创 2016年08月30日 22:01:33

PHP的错误和异常处理 原创



PHP的错误处理方式


错误处理


PHP程序的错误发生一般归属于下列三个领域:
语法错误:  如 声明变量未加 $  功能执行语句未加 ; 等 
                         语法错误最常见,并且也容易修复。如:代码中遗漏一个分号。这类错误会阻止脚本的执行。
           运行时错误:   
                            这种错误一般不会阻止PHP脚本的执行,但会阻止当前要做的事情。输出一条错误,但php脚本继续执行
           逻辑错误:  如if($i = 9)   if($i == 9)
                         这种错误最麻烦,既不阻止脚本执行,也不输出错误消息。




错误报告级别






常用错误报告:1 最高     8 最小
错误:E_ERROR           1   此错误会终止所以程序运行
    警告:E_WARNING 2  发出警告的行 将无法正常运行,程序继续向下执行
    注意:E_NOTICE 8 不影响程序运行,只是会显示注意信息,如变量未声明就使用


      调整错误报告级别
(显示的错误信息级别)


错报报告建议:
在开发程序时,输出所有错误报告有利于程序调试,包括开启注意信息。
            在程序上线运行阶段,不要输出到网页内任何一种错误报告(不专业,危险)可以输出到指定的文件。


错报报告调整方式


说明:调整方式有两种,建议使用第二种,移植性好。不用考虑其他服务器消息设置的方式;


第一种:更改php.ini的配置文件,长久有效。


打开php.ini  查找到 error_reporting 位置;
error_reporting =  E_ALL       开启所有错误报告
error_reporting =  E_ALL & ~E_NOTICE  开启所有错误日志,除了注意消息
error_reporting =  E_ALL & ~E_NOTICE | E_STRICT 开启所有错误日志,除了注意消息和标准化警告。


第二种:使用相关函数在页面中设置,加载的页面生效。不加载不生效。


 1. error_reporting(E_ALL & ~E_NOTICE);   (函数设置第一种)
    error_reporting(1); (开启所有错误信息)
error_reporting(0); (关闭所有错误信息)
2.ini_set('error_reporting','E_ALL');   设置配置的参数 (使用此方式)
       ini_get('upload_max_filesize');  获得配置文件的设置参数。




使用trigger_error()函数代替die()


说明:
首先函数die()等同于exit(),两者如果执行都会中止PHP程序,而且可以在退出程序之前输出一些错误报告。
trigger_error()则可以生成一个用户警告来代替,使用程序更具有灵活性。例如,trigger_error("没有找到文件",
E_USER_ERROR)。使用trigger_error()函数来替代die(),你的代码在处理错误上会更具优势,对于客户程序员来
说更易于处理错误。




自定义处理方式


<?php
/**
*不需要掌握
*    定义Error_Handler函数,
*   作为set_error_handler()的第一个参数"回调"
*  @param  int     $error_level  错误级别
*  @param string $error_message  错误信息
*  @param  string  $file            错误所在文件
* @param  int     $lin               错误所在行数
*/


function error_handler($error_level,$error_message, $file, $line)
{
          $EXIT = FALSE;
          switch( $error_level ) {
              //提醒级别
              case E_NOTICE:
              case E_USER_NOTICE :
                   $error_type = 'Notice'; break;
     
               //警告级别
              case E_WARNING:
              case E_USER_WARNING:
                   $error_type = 'Warning'; break;
                //错误级别
               case E_ERROR:
               case E_USER_ERROR:
                      $error_type = 'Fatal Error';
                      $EXIT = TRUE; break;
               
               //其他末知错误
               default:
                      $error_type = 'Unknown';
                      $EXIT = TRUE; break;
        }
        //直接打印错误信息,也可以写文件或数据库
        //printf($format,$a,$b,$c)
        printf ("<font color='#FF0000'><b>%s</b></font>: %s in <b>%s</b> on line <b>%d</b><br>\n", $error_type, $error_message, $file, $line);
        
        //若出现错误则跳转到友好错误提示页面
        if(TRUE === $EXIT) {
           echo '<script type="text/javascript">window.location="er.html" </script>';
        }
 }
 error_reporting(0); //屏蔽程序中的错误
    
    set_error_handler('error_handler'); //这个才是关键点,把错误的处理交给error_handler()
    
    echo $novar; //使用末定义的变量要报 notice 的
    
   // echo 3/0;  //除以0要报警告的
    
   // trigger_error('Trigger a fatal error', E_USER_ERROR); //自定义一个错误


写到错误日志


说明:为了安全,和网页可读性更好。应该立即将display_errors 选项关闭 ,来把信息输出到指定文件或者是操作系统日志中。


第一种情况:默认会写入到web服务器系统日志中
                           (不需要特别设置)


修改php.ini文件:
error_reporting = E_ALL //将向PHP发送每个错误
display_errors=Off     //不显示错误报告
log_errors=On           //决定日志语句记录的位置
log_errors_max_len=1024// 每个日志项的最大长度






使用函数设置:
ini_set('error_reporting','E_ALL');  
ini_set('display_errors','Off'); // On或Off  1或0  
ini_set('log_errors','On');
ini_set('log_errors_max_len','1024');


第二种情况:写入到指定的文件中


修改php.ini文件:
error_reporting = E_ALL //将向PHP发送每个错误
display_errors=Off     //不显示错误报告
log_errors=On           //决定日志语句记录的位置
log_errors_max_len=1024// 每个日志项的最大长度
error_log=D:/myerror.log//指定错误写进的文件




使用函数设置:
ini_set('error_reporting','E_ALL');  
ini_set('display_errors','Off');
ini_set('log_errors','On');
ini_set('log_errors_max_len','1024');
ini_set('error_log','d:/myerror.log');


第三种情况:写入到操作系统的日志中


修改php.ini文件:
error_reporting = E_ALL //将向PHP发送每个错误
display_errors=Off     //不显示错误报告
log_errors=On           //决定日志语句记录的位置
log_errors_max_len=1024// 每个日志项的最大长度
error_log= syslog//指定错误写进的文件




使用函数设置:
ini_set('error_reporting','E_ALL');  
ini_set('display_errors','Off');
ini_set('log_errors','On');
ini_set('log_errors_max_len','1024');
ini_set('error_log','syslog');


使用函数设置:
// define_syslog_variables(); 5.3.0以后此句省略
ini_set('display_errors','Off');  //关闭屏幕输出
openlog('Mylog',LOG_PID,LOG_USER);
syslog(LOG_WARNING,iconv('utf-8','gbk','test'));
closelog();


说明:
1.致命错误E_ERROR不会写入到指定的文件和操作系统日志里。
2.手写一条信息到错误日志:  error_log("这是85期测试错误信息文件:".__FILE__.'所在行数:'.__LINE__);
3.默认情况下,在设置了display_errors=Off  或 ini_set('display_errors','Off');后系统的致命信息还是会输出到页面内,
 屏蔽方法为,添加一条语句 error_reporting(0);  ?> 并闭合PHP标签


程序员自己处理错误信息


//程序员自己处理错误
//set_error_handler

set_error_handler('myerror');

function myerror($level,$message,$file,$line){
$str = date('Y-m-d H:i:s')."\n";
$str .= '错误级别:'.$level."\n";
$str .= '错误信息:'.$message."\n";
$str .= '错误文件'.$file."\n";
$str .= '错误行号'.$line."\n";
//error_log($str,3,'d:/log.txt');
echo $str;
}
in_array();
var_dump();
屏幕显示,并写入文件


注意:
set_error_handler  函数用法
error_log 函数用法






PHP的异常处理


<?php


class DBException extends Exception{
public function __toString(){
return $this->message;
}
}


class HTMLException extends Exception{
public function __toString(){
return $this->message;
}
}


try{
throw new HTMLException('页面不存在');


}catch(DBException $db){
echo '数据链接失败';
}catch(HTMLException $html){
echo '页面不存在l';
}catch(Exception $ex){
echo '参数问题';

}




版权声明:本文为博主原创文章,未经博主允许不得转载。

php基础-错误处理

错误的分类 通常分3种:   语法错误: 程序运行之前,都要先检查语法。如果语法有错误,就会立即报错,并且不会去执行程序。   运行时错误: 就是在程序语法检查通过后,,开始运行程序并在...

php_错误处理机制

  • 2011年07月22日 08:42
  • 176KB
  • 下载

php.ini中的错误处理配置

1、display_error = On该选项设置是否将错误信息作为输出的一部分显示到屏幕,或者对用户隐藏而不显示。       log_errors_max_len = 1024 运行时错误日志的长...

[PHP]文件加载和错误处理

本文主要介绍了PHP的文件加载的方法,文件路径和错误处理,以及错误相关的设置...

(四)PHP面向对象理论4---异常和错误处理

1.php异常处理的场景以及应用 2.php面向对象的总结
  • bwshqh
  • bwshqh
  • 2015年08月02日 15:02
  • 421

PHP 错误处理(很有意思)

PHP 错误处理在 PHP 中,默认的错误处理很简单。一条错误消息会被发送到浏览器,这条消息带有文件名、行号以及描述错误的消息。 PHP 错误处理 在创建脚本和 Web 应用程序时,错误处理是一个重要...

PHP错误处理函数

debug_backtrace() --  追踪当前代码被调用的源头 PHP debug_backtrace() 函数生成一个 backtrace。 该函数返回一个关联数组。下面是可能返回...

php中的错误处理机制

1.如果没有错误处理机制会怎样?   案例1:   结果: Warning: fopen(aa.txt) [function.fopen]: failed to open stream:...
  • wmin510
  • wmin510
  • 2016年05月21日 19:53
  • 92

php异常、错误处理机制

php异常、错误处理机制 在实际开发中,错误及异常捕捉仅仅靠try{}catch()是远远不够的。 所以引用以下几中函数。 我们先来说异常: 首先要明白异常跟错误是不...
  • samxx8
  • samxx8
  • 2015年07月30日 16:36
  • 403

PHP错误处理

程序一定会有错误的时候 天才的程序员说,我的程序绝对OK,没有错误,我从不处理错误。的确,天才程序员的程序从来没有错误,但程序只要运行,就会有错误!不管你信不信,我反正是信的。 错误不只是...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:php错误处理--php基础最详细教程
举报原因:
原因补充:

(最多只允许输入30个字)