PHP-错误处理

Posted Sch01aR#

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP-错误处理相关的知识,希望对你有一定的参考价值。

php 5 预定义错误和日志常量

值   常量  描述
 1  E_ERROR  运行时致命的错误,会终止执行脚本。 
 2  E_WARNING  运行时的警告,非致命的错误,不终止执行脚本。 
 4  E_PARSE  编译时语法解析错误,解析错误仅仅由分析器产生。
 8  E_NOTICE  运行时的注意通知,表示脚本遇到可能会表现为错误的情况,但是在可以正常运行的脚本里面也可能会有类似的通知。
 16  E_CORE_ERROR  在 PHP 初始化启动过程中发生的致命错误。该错误类似 E_ERROR,但是是由 PHP 引擎核心产生的,不包括PHP核心造成的错误。
 32  E_CORE_WARNING  PHP 初始化启动过程中发生的警告 (非致命错误) 。类似 E_WARNING,但是是由 PHP 引擎核心产生的,不包括PHP核心错误警告。
 64  E_COMPILE_ERROR  致命编译时错误。类似 E_ERROR, 但是是由 Zend 脚本引擎产生的。
 128  E_COMPILE_WARNING  编译时警告 (非致命错误)。类似 E_WARNING,但是是由 Zend 脚本引擎产生的。
 256  E_USER_ERROR  用户产生的错误信息。类似 E_ERROR, 但是是由用户自己在代码中使用PHP函数 trigger_error()来产生的。
 512  E_USER_WARNING  用户产生的警告信息。类似 E_WARNING, 但是是由用户自己在代码中使用 PHP 函数 trigger_error() 来产生的。
 1024  E_USER_NOTICE  用户产生的注意信息。类似 E_NOTICE, 但是是由用户自己在代码中使用 PHP 函数 trigger_error() 来产生的。
 2048  E_STRICT  关于PHP版本移植的兼容性和互操作性的建议。
 4096  E_RECOVERABLE_ERROR  可被捕捉的致命错误。它表示发生了一个可能非常危险的错误,但是还没有导致 PHP 引擎处于不稳定的状态。 如果该错误没有被用户自定义句柄捕获 (参见 set_error_handler()),将成为一个 E_ERROR 从而脚本会终止运行。
 8192  E_DEPRECATED  运行时通知。启用后将会对在未来版本中可能无法正常工作的代码给出警告。
 16384  E_USER_DEPRECATED  用户产生的警告信息。类似 E_DEPRECATED, 但是是由用户自己在代码中使用 PHP 函数 trigger_error() 来产生的。
 32767  E_ALL  E_STRICT 除外的所有错误和警告信息。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

打开一个不存在的文件

<?php
/** * Coded by MuT6 Sch01aR
 * Date: 2018/3/12 22:30
 */

	$fp = fopen(\'test.txt\',\'r\');
	echo \'ok\';
	
?>

 运行结果

报了一个文件不存在的警告,后面的ok成功打印

使用die()方法处理错误

执行完die()方法后程序会退出

<?php
/**
 * Coded by MuT6 Sch01aR
 * Date: 2018/3/12 22:30
 */

    //使用die()方法处理
    if (!file_exists(\'test.txt\')){  //判断文件是否存在
        die(\'不存在文件!\');
    }
    
    //die()方法的另一个更简便的写法
    file_exists(\'test.txt\') or die(\'不存在文件!!!\')

?>

 运行结果

自定义错误处理函数

自己定义错误处理的函数来处理程序的错误

<?php
/**
 * Author: MuT6 Sch01aR
 * Date: 2018/3/13
 * Time: 12:12
 */

    //定义一个错误处理函数
    function my_error($errno, $errmsg){  // $errno为错误号,$errmsg为错误信息
        echo \'错误号:\'.$errno."\\n";
        echo \'错误信息:\'.$errmsg;
    }

    //改写set_error_handler处理器,调用错误处理函数my_error处理级别为E_WARNING的错误
    set_error_handler(\'my_error\', E_WARNING);

    $fp = fopen(\'test.txt\',\'r\');  //打开一个不存在的文件

?>

 运行结果

错误触发器

错误触发器可以处理一些特定的错误

<?php
/**
 * Author: MuT6 Sch01aR
 * Date: 2018/3/13
 * Time: 12:41
 */

    $age = 121;
    if ($age > 120){
        //调用系统的触发器
        trigger_error(\'年龄过大\',E_USER_WARNING);
        exit();
    }

?>

 运行结果

系统触发器处理了特定的错误

也可以自己定义错误触发器

<?php
/**
 * Author: MuT6 Sch01aR
 * Date: 2018/3/13
 * Time: 12:41
 */

    //定义一个错误触发器
    function my_error($errno, $errmsg){
        echo \'错误号:\'.$errno."\\n";
        echo \'错误信息:\'.$errmsg;
    }

    set_error_handler(\'my_error\', E_USER_WARNING);

    $age = 121;
    if ($age > 120){
        //调用系统的触发器
        trigger_error(\'年龄过大\',E_USER_WARNING);
        exit();
    }

?>

 运行结果

错误日志

错误日志用来记录程序运行时的错误

<?php
/**
 * Author: MuT6 Sch01aR
 * Date: 2018/3/13
 * Time: 12:02
 */

    function my_error($errno, $errmsg){
        echo \'错误号:\'.$errno.\'----\'.\'错误信息:\'.$errmsg;
        $error_msg = \'错误号:\'.$errno.\'----\'.\'错误信息:\'.$errmsg;
        date_default_timezone_set("Asia/Chongqing");
        $error_time = date(\'Y-m-d G:i:s\');
        error_log(\'[\'.$error_time.\']\'.$error_msg."\\n",3,"log.txt");
    }

    set_error_handler(\'my_error\');

    function Guess_Age($age){
        if($age> 120){
            trigger_error(\'年龄过大\'); //触发错误
        }
    }

    Guess_Age(123);
?>

 运行结果

生成了一个记录错误的日志文件

 

以上是关于PHP-错误处理的主要内容,如果未能解决你的问题,请参考以下文章

运行/调试你的PHP代码

在 PHP 重定向期间处理片段标识符

超级有用的9个PHP代码片段

PHP必用代码片段

学习小片段——springboot 错误处理

超实用的php代码片段