资讯专栏INFORMATION COLUMN

php的异常和处理

CarterLi / 2555人阅读

摘要:常见错误处理类型语法错误环境错误逻辑错误常见错误级别最低级别的错误不推荐,不建议,使用一些过期函数的时候会出现,程序继续执行通知级别的错误使用一些未定义变量常量或者数组没有加引号的时候会出现,程序继续执行警告级别的错误程序出问题了,需要修改

常见错误处理类型

语法错误

环境错误

逻辑错误

常见错误级别

Deprecated 最低级别的错误

不推荐,不建议,使用一些过期函数的时候会出现,程序继续执行

Notice 通知级别的错误

使用一些未定义变量、常量或者数组key没有加引号的时候会出现,程序继续执行

Waning 警告级别的错误

程序出问题了,需要修改代码!!!程序继续执行

Fatal Error 错误级别的错误

程序直接报错,需要修改代码!!!中断程序执行

parse error 语法解析错误

语法检查阶段报错,需要修改代码!!!中断程序执行

E_USER_相关的错误

用户定义的错误,用户手动抛出错误,进行自定义错误处理

PHP配置文件和错误相关选项

设置错误级别
1、通过修改php.ini文件设置错误级别,静态设置,需要重启apache
// error_reporting = E_ALL&~E_NOTICE; //显示所有错误,除了E_NOTICE级别
// display_errors = 1; //线下开启,先上关闭

2、通过error_reporting()函数设置,动态设置
// error_reporting(E_ALL&~E_NOTICE); //显示所有错误,除了E_NOTICE级别
// error_reporting(0); //屏蔽所有错误,只会显示语法解析错误
// erorr_reporting(-1); //显示所有错误

3、通过ini_set()函数进行运行时设置,动态设置
// ini_set("error_reporting",0);
// ini_set("error_reporting",-1);
// ini_set("display_errors",0);

使用triggerr_error进行错误抛出
代码继续执行";
记录错误

配置php.ini脚本设置记录错误
log_errors = On //是否将产生错误信息记录到日志或者error_log中
;error_log = syslog //设置脚本错误将记录到系统日志中
log_errors_max_len = 1024 //设置错误报错最大值,单位字节
ignore_repeated_errors = Off //是否忽略重复的错误信息
ignore_repeated_source = Off //是否忽略重复错误消息的来源
track_errors = On //如果开启,最后一个错误将永远保存在$php_errormsg中

将错误记录到指定的文件中

";

settype($var,"king"); //Warning
echo "
"; test(); //Fatal error

将日志文件保存到系统日志中


将错误以邮件形式发送
1、首先需要配置邮件服务器!
2、去php.ini中配置邮件参数
3、写代码

error_log("当前系统被人攻击!产生错误!",1,"87399497@qq.com");
error_log函数使用
error_log($msg); //传入错误记录,需要与error_log配置使用
如何使用Set_error_handler()
错误代码:[{$errno}] {$errmsg} 
".PHP_EOL; echo "错误行号:{$file}文件中的第 {$line}
".PHP_EOL; echo "PHP版本:".PHP_VERSION."(".PHP_OS.")
".PHP_EOL; //注意:如果自定义错误处理捕获了,代码还是会执行,如果不想被执行,需要die掉!!! //die; } //设置自定义错误处理 set_error_handler("customer_error"); //输出一个未定义变量的警告 echo $test; echo "
"; //原生出错 //Notice: Undefined variable: test in D:phpStudyWWWexampleindex.php on line 26 //自定义出错 //错误代码:[8] Undefined variable: test //错误行号:D:phpStudyWWWexampleindex.php文件中的第 26 //PHP版本:5.3.29(WINNT) //无法捕获一个致命错误Fatal error,会切换到原生出错 //test(); //手动抛出一个错误,被自定义的错误处理捕获 trigger_error("this is a test of error",E_USER_ERROR); echo "contiune"; echo "
"; //错误代码:[256] this is a test of error //错误行号:D:phpStudyWWWexampleindex.php文件中的第 43 //PHP版本:5.3.29(WINNT) //contiune //取消自定义错误处理,将会重新适应PHP原生的错误处理 restore_error_handler(); echo $tt; echo "
"; //Notice: Undefined variable: tt in D:phpStudyWWWexampleindex.php on line 49 //重新挂载自定义错误处理 //除了NOTICE级别的交给系统处理,剩下的全部使用customer_error自定义的错误处理 set_error_handler("customer_error",E_ALL&~E_NOTICE); echo $asc; //E_NOTICE级别,系统的错误处理 settype($var,"king"); //E_WARNING级别,使用自定义的错误处理 //Notice: Undefined variable: asc in D:phpStudyWWWexampleindex.php on line 65 //错误代码:[2] settype() [function.settype]: Invalid type //错误行号:D:phpStudyWWWexampleindex.php文件中的第 66 //PHP版本:5.3.29(WINNT)
自定义一个错误处理器
msg = $msg;
        $this->filename = $filename;
        $this->line = $line;
        $this->vars = $vars;
    }

    public static function deal($errno,$errmsg,$filename,$line,$vars){
        
        $self = new self($errmsg,$filename,$line,$vars);
        switch ($errno) {
            case E_USER_ERROR :
                return $self->dealError();
                break;
            case E_USER_WARNING :
            case E_WARNING :
                return $self->dealWarning();
                break;
            case E_NOTICE :
            case E_USER_NOTICE :
                return $self->dealNotice();
                break;
            default:
                return false;
                break;
        }
    }

    /**
     * 处理致命错误
     * @return [type] [description]
     */
    public function dealError(){
        ob_start();
        debug_print_backtrace();
        $backtrace = ob_get_flush();
        $errmsg = <<filename}
产生错误的信息:{$this->msg}
产生错误的行号:{$this->line}
追踪信息:{$backtrace}
EOF;
        //发送邮件的错误日志
        //error_log($errmsg,1,"87399497@qq.com");
        //记录到错误日志
        error_log($errmsg,3,"D:/logs/customer_error.log");
        exit(1);
    }

    /**
     * 处理警告错误
     * @return [type] [description]
     */
    public function dealWarning(){
        $errmsg = <<filename}
产生警告的信息:{$this->msg}
产生警告的行号:{$this->line}
EOF;
        error_log($errmsg,3,"D:/logs/customer_warning.log");
    }

    /**
     * 处理通知级别的错误
     * @return [type] [description]
     */
    public function dealNotice(){
        $date = date("Y-m-d H:i:s",time());
        $errmsg = <<filename}
产生错误的信息:{$this->msg}
产生错误的行号:{$this->line}
产生通知的时间:{$date}
EOF;
        error_log($errmsg,3,"D:/logs/customer_notice.log");
    }
}



//显示所有错误
error_reporting(-1);

//设置自定义错误,使用传入类和方法的方式
set_error_handler(array("MyErrorHandler","deal"));

//触发NOTICE级别错误,会保存到log日志中
echo $tt;

//手动触发一个错误
trigger_error("手动抛出一个错误",E_USER_ERROR);

register_shutdown_function()函数
";
            error_get_last();
            echo "
"; //因为register_shutdown_function调用该函数的时候,是代码终止,脱离当前PHP上下文环境了 //所以$filename的路径要写决定路径!!! file_put_contents("D:logs egister_shutdown_function.log", error_get_last()); die("endScript"); } } } //特别声明!如果有die或exit在注册错误处理之前,那么将不会注册错误处理 register_shutdown_function(array("Showdown","endScript")); echo md6();
错误抑制符
@settype($var,"longjq"); //无变量$var,使用@符号进行抑制错误输出
错误级别

http://www.w3school.com.cn/php/php_ref_error.asp

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/21189.html

相关文章

  • 浅析php异常与错误

    摘要:异常与错误异常是指程序运行中不符合预期情况以及与正常流程不同的状况。在中主要的错误等级如下最低级别的错误,表示不推荐不建议。小结中错误和异常是两个不同的概念,这种设计根本上导致了的异常和错误与其它语言相异。中,异常时错误唯一的报告方式。 异常与错误 异常是指程序运行中不符合预期情况以及与正常流程不同的状况。错误则属于自身问题,是一种非法语法或者环境问题导致的、让编译器无法通过检查设置无...

    Leck1e 评论0 收藏0
  • PHP基础:异常处理Exception

    摘要:是所有异常的基类。它包含的异常的确是对象,唯一条件就是必须从类继承。在语句中使用所谓的是一关系对类的名字和异常对象做检查。如果异常在任何地方都没能捕获,那么会提供最后的机会异常处理函数。 Exception是所有异常的基类。 Exception { /* 属性 */ protected string $message ; protected int $code ...

    laoLiueizo 评论0 收藏0
  • PHP 错误与异常

    摘要:但异常捕获后程序可以继续执行,而真正的错误出现后程序就必须终止异常可以使用来捕获捕获,捕获之后后续代码可以继续执行而错误是无法使用捕获的如果抛出了异常,就必须捕获它否则程序终止执行。 PHP错误级别 Parse error > Fatal Error > Waning > Notice > Deprecated Deprecated 最低级别的错误(不推荐,不建议)使用一些过期函数的...

    longmon 评论0 收藏0
  • 上手并过渡到PHP7(4)——取代fatal errorengine exceptions

    摘要:上手并过渡到取代的泊学原文链接泊学代码秀视频自从以来,的错误处理几乎就是一成不变的。在中,这个尴尬的现状,终于被彻底改变了。无论是还是传统的,只要类型不匹配约束的时候,就会导致异常。 上手并过渡到PHP7 取代fatal error的engine exceptions 泊学原文链接泊学代码秀视频 自从PHP 4以来,PHP的错误处理几乎就是一成不变的。只不过在PHP 5.0里添加了E_...

    mylxsw 评论0 收藏0
  • PHP框架中日志系统

    摘要:一的几个函数异常捕获自定义处理函数注册错误捕获自定义处理函数注册程序执行时异常终止错误捕获处理函数注册这三个函数在错误处理控制中给开发者提供了很大的自主空间,在日志系统中记录日志信息有他们的功劳。下面要说的类库是借鉴了日志系统的设计。 引言 接触过php框架的朋友们可能都知道,日志在项目中的重要作用了,他可以帮助我们定位错误的位置,让程序更友好(处理得当的话不会直接抛出一大堆只有程...

    ningwang 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<