zoukankan      html  css  js  c++  java
  • PHP基础之 错误处理 及 异常处理

    错误处理:
    1.使用die()方法,结束语句的执行,并输出错误消息
    2.自定义错误和错误触发器

    自定义错误处理函数(系统有默认的错误处理函数,自定义的错误处理会覆盖默认的处理函数)
    ======================================================================
    error_function(error_level,error_message,error_file,error_line,error_context)
    参数 描述
    error_level 必需。为用户定义的错误规定错误报告级别。必须是一个值数。
    error_message 必需。为用户定义的错误规定错误消息。
    error_file 可选。规定错误在其中发生的文件名。
    error_line 可选。规定错误发生的行号。
    error_context 可选。规定一个数组,包含了当错误发生时在用的每个变量以及它们的值。

    错误级别:
    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 的一部分)

    错误触发器:trigger_error($errMsg,$errType)
    ===========================================
    作用:用于指定自定义的错误消息
    可能的错误类型$errType:
    E_USER_ERROR - 致命的用户生成的 run-time 错误。错误无法恢复。脚本执行被中断。
    E_USER_WARNING - 非致命的用户生成的 run-time 警告。脚本执行不被中断。
    E_USER_NOTICE - 默认。用户生成的 run-time 通知。脚本发现了可能的错误,也有可能在脚本运行正常时发生。


    错误日志 error_log(error,[type],[destination],[headers])
    ========================================================
    作用:用于将错误信息保存到指定文件或向远程目的地发送错误信息
    参数 描述
    error 必需。要记录的错误消息。
    type 可选。规定错误记录的类型。

    可能的记录类型:

    0 - 默认。根据在 php.ini 文件中的 error_log 配置,错误被发送到服务器日志系统或文件。
    1 - 错误被发送到 destination 参数中的地址。只有该类型使用 headers 参数。
    2 - 通过 PHP debugging 连接来发送错误。该选项只在 PHP 3 中可用。
    3 - 错误发送到文件目标字符串。
     
    destination 可选。规定向何处发送错误消息。该参数的值依赖于 "type" 参数的值。
    headers 可选。只在 "type" 为 1 时使用。

    规定附加的头部,比如 From, Cc 以及 Bcc。由 CRLF ( ) 分隔。

    注释:在发送电子邮件时,必须包含 From 头部。可以在 php.ini 文件中或者通过此参数设置。
     

    $test=2;

    if ($test>1)
    {
        error_log("A custom error has been triggered",1,"someone@example.com","From: webmaster@example.com");
    }

    PHP 异常处理
    ============
    try{
        可能出现异常的代码块
    }catch(Exception $e){
        处理异常/抛出异常
    }

    抛出一个异常:throw new Exception("异常信息");

    Try - 使用异常的函数应该位于 "try" 代码块内。如果没有触发异常,则代码将照常继续执行。但是如果异常被触发,会抛出一个异常。
    Throw - 这里规定如何触发异常。每一个 "throw" 必须对应至少一个 "catch"
    Catch - "catch" 代码块会捕获异常,并创建一个包含异常信息的对象

    注意:
    当出现异常后,则出现异常的代码之后的代码不再执行
    使用多个catch可以捕获多种类型的异常信息
    PHP5.0 以前的函数没有异常机制,无法捕获异常,只能使用错误处理机制处理

    设置顶层异常处理器 (Top Level Exception Handler)
    set_exception_handler() 函数可设置处理所有未捕获异常的用户定义函数。

    异常的规则
    需要进行异常处理的代码应该放入 try 代码块内,以便捕获潜在的异常。
    每个 try 或 throw 代码块必须至少拥有一个对应的 catch 代码块。
    使用多个 catch 代码块可以捕获不同种类的异常。
    可以在 try 代码块内的 catch 代码块中再次抛出(re-thrown)异常。
    简而言之:如果抛出了异常,就必须捕获它。

    自定义异常类:class MyException1 extends Exception(){}

    <?php
    // die()函数:
    // ===========
    // 例:当打开一个文件,如果不存在,则终止语句执行,并输出消息,否则继续执行
    // file_exists("1.txt") or die("打开文件出错或文件不存在");
    // echo "继续文件打开工作";
    
    
    //自定义错误处理函数
    //==================
    //
    //参数:$errorCode:错误级别的值,$errorMsg:错误消息
    // function WarningError($errorVal,$errorMsg,$fielName,$line,$arrVal)
    // {
    // 	echo("<p>第<b>".$line."</b>行发生错误:</p>");
    // 	echo("<p style='color:red'>错误消息:$errorMsg</p>");
    // }
    
    // //注册自定义错误处理函数,对WARNING级别的错误进行处理
    // set_error_handler("WarningError",E_WARNING);//第二个参数为可选错误级别,默认为E_ALL,即所有的错误
    
    // $f = fopen("2.txt", "r");
    
    
    
    //错误触发器:trigger_error($errMsg,$errType) 
    //===========================================
    //作用:用于指定自定义的错误消息
    // 可能的错误类型$errType:
     
    function WarningError($errorVal,$errorMsg,$fielName,$line,$arrVal)
    {
    	echo("<p>第<b>".$line."</b>行发生错误:</p>");
    	echo("<p style='color:red'>错误消息:$errorMsg</p>");
    }
    
    function MainError($errorVal,$errorMsg,$fielName,$line,$arrVal)
    {
    	echo("<p>第<b>".$line."</b>行发生错误:</p>");
    	echo("<p style='color:red'>错误消息:$errorMsg</p>");
    }
    //注册自定义错误处理函数,对E_USER_ERROR级别的错误进行处理
    set_error_handler("MainError",E_USER_ERROR);
    set_error_handler("WarningError",E_USER_WARNING);
    
    
    //设置年龄,当年年龄的区间不在指定区间内时,触发自定义的错误消息
    function SetAge($value=0)
    {
    	if($value<0)
    	{
    		trigger_error("输入年龄过小",E_USER_ERROR);
    	}
    	elseif ($value>=150) 
    	{
    		trigger_error("输入年龄过大");
    	}
    	elseif (!is_int($value)) {
    		trigger_error("请输入正整数!",E_USER_WARNING);
    	}
    
    	echo("最后的代码执行了
    ");
    }
    
    
    // SetAge(180);//由于没有给默认的错误触发器注册自定义的E_USER_NOTICE级别错误处理函数,所以结果是
    // Notice: 输入年龄过大 in D:PHPEnvWWW	est001.php on line 77
    // 最后的代码执行了
    
    // SetAge(-10);
    // 注册了E_USER_ERROR级别的错误处理函数后,输出结果为:
    // 第73行发生错误:
    // 错误消息:输入年龄过小
    // 最后的代码执行了
    
    // SetAge("aa");
    // 
    // 
    // 
    // 
    // 错误日志 error_log(error,[type],[destination],[headers])
    // ===================
    // 作用:用于将错误信息保存到指定文件或向远程目的地发送错误信息
    // 参数 描述 
    // error 必需。要记录的错误消息。 
    // type 可选。规定错误记录的类型。
    
    // 可能的记录类型:
    
    // 0 - 默认。根据在 php.ini 文件中的 error_log 配置,错误被发送到服务器日志系统或文件。 
    // 1 - 错误被发送到 destination 参数中的地址。只有该类型使用 headers 参数。 
    // 2 - 通过 PHP debugging 连接来发送错误。该选项只在 PHP 3 中可用。 
    // 3 - 错误发送到文件目标字符串。 
     
    // destination 可选。规定向何处发送错误消息。该参数的值依赖于 "type" 参数的值。 
    // headers 可选。只在 "type" 为 1 时使用。
    
    // 规定附加的头部,比如 From, Cc 以及 Bcc。由 CRLF (
    ) 分隔。
    
    // 注释:在发送电子邮件时,必须包含 From 头部。可以在 php.ini 文件中或者通过此参数设置。
     
    
    // $test=2;
    
    // if ($test>1)
    // {
    // 	error_log("A custom error has been triggered",1,"someone@example.com","From: webmaster@example.com");
    // }
    
    
    date_default_timezone_set("PRC");//设置时区【也可以在php.ini中设置】
    function SetPhone($value='0')
    {
    	if(!is_string($value))
    	{
    		error_log(date("Y-m-d G:i:s")."输入类型错误
    ",3,"error.txt");
    	}
    	else if (strlen($value)>11) {
    		error_log(date("Y-m-d G:i:s")."号码长度过长
    ",3,"error.txt");
    	}
    }
    
    //发生的错误信息会记录到当前文件同目录下的error.txt文件中
    // SetPhone("1252345345456");
    // SetPhone(12254);
    
    
    /*
    PHP 异常处理
    ============
    try{
    	可能出现异常的代码块
    }catch(Exception $e){
    	处理异常/抛出异常
    }
    
    抛出一个异常:throw new Exception("异常信息");
    
    Try - 使用异常的函数应该位于 "try" 代码块内。如果没有触发异常,则代码将照常继续执行。但是如果异常被触发,会抛出一个异常。 
    Throw - 这里规定如何触发异常。每一个 "throw" 必须对应至少一个 "catch" 
    Catch - "catch" 代码块会捕获异常,并创建一个包含异常信息的对象 
    
    注意:
    当出现异常后,则出现异常的代码之后的代码不再执行
    使用多个catch可以捕获多种类型的异常信息
    PHP5.0 以前的函数没有异常机制,无法捕获异常,只能使用错误处理机制处理
    
    设置顶层异常处理器 (Top Level Exception Handler)
    set_exception_handler() 函数可设置处理所有未捕获异常的用户定义函数。
    
    异常的规则
    需要进行异常处理的代码应该放入 try 代码块内,以便捕获潜在的异常。 
    每个 try 或 throw 代码块必须至少拥有一个对应的 catch 代码块。 
    使用多个 catch 代码块可以捕获不同种类的异常。 
    可以在 try 代码块内的 catch 代码块中再次抛出(re-thrown)异常。 
    简而言之:如果抛出了异常,就必须捕获它。
    
    自定义异常类:class MyException1 extends Exception(){}
    
    */
    function DelUser($userName)
    {
    	if($userName=="admin")
    	{
    		throw new Exception("删除失败");
    	}
    }
    
    // try{
    // 	DelUser("admin");
    // 	echo "我被执行了";//这句代码不会被执行(某句代码出异常了,则后面的代码不再执行)
    // }catch(Exception $e){//捕获异常信息
    	
    // 	echo($e->getMessage());//$e->getMessage()获得异常信息
    // 	echo(" 错误行:".$e->getLine());
    // }
    
    
    //设置顶层异常处理器 set_exception_handler() 
    //作用:用于捕获未捕获的异常信息
    function MyException($e)
    {
    	echo "
    顶级异常处理器捕获异常:".$e->getMessage();
    }
    set_exception_handler("MyException");
    // DelUser("admin");
    
    
    
    //自定义异常类:class MyException1 extends Exception
    class MyException1 extends Exception
    {
    
    }
    class MyException2 extends Exception
    {
    
    }
    function A()
    {
    	throw new MyException1("aaa");
    }
    function B()
    {
    	throw new MyException2("bbb");
    }
    
    try{
    	A();
    	B();
    }
    catch(MyException1 $e1){
    	echo $e1->getMessage();
    }
    catch(MyException2 $e2){
    	echo $e2->getMessage();
    }
    
    ?>
  • 相关阅读:
    2019-08-01 Ajax实现从数据库读取表
    2019-08-01 JQuery事件
    2019-07-31 Jquery
    2019-07-30 ThinkPHP文件上传
    2019-07-29 ThinkPHP简单的增删改查
    2017-07-26 ThinkPHP简单使用
    python——虚拟环境之virtualenvwrapper-win(windows10,64位)
    python——虚拟环境之virtualenv(windows10,64位)
    python——python3.6环境搭建(Windows10,64位)
    使用poi进行excel下载
  • 原文地址:https://www.cnblogs.com/lt-style/p/3501057.html
Copyright © 2011-2022 走看看