前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >PHP中的错误处理

PHP中的错误处理

作者头像
LA0WAN9
发布于 2021-12-14 00:09:10
发布于 2021-12-14 00:09:10
1.8K00
代码可运行
举报
文章被收录于专栏:火丁笔记火丁笔记
运行总次数:0
代码可运行

程序只要在运行,就免不了会出现错误!或早或晚,只是时间问题罢了。

错误很常见,比如Notice,Warning等等。此时一般使用set_error_handler来处理:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php

set_error_handler(function($errno, $errstr, $errfile, $errline) {
    var_dump($errno, $errstr, $errfile, $errline);
});

// Notice: Use of undefined constant strlen
strlen;

// Warning: strlen() expects exactly 1 parameter, 0 given
strlen();

?>

具体能做些什么呢?统一管理错误日志,或者呈现一个相对友好的错误提示页面等等。

但需要注意的是set_error_handler无法捕捉某些Fatal error,比如下面这个错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php

set_error_handler(function($errno, $errstr, $errfile, $errline) {
    var_dump($errno, $errstr, $errfile, $errline);
});

// Fatal error: Call to undefined function undefined_function()
undefined_function();

?>

不过我们真的就一点办法都没有了么?当然不是,我们不仅有办法,而且还有好几种:

第一种:ob_start + error_get_last

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php

ob_start(function($buffer) {
    if ($error = error_get_last()) {
        return var_export($error, true);
    }

    return $buffer;
});

// Fatal error: Call to undefined function undefined_function()
undefined_function();

?>

第二种:register_shutdown_function + error_get_last

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php

register_shutdown_function(function() {
    if ($error = error_get_last()) {
        var_dump($error);
    }
});

// Fatal error: Call to undefined function undefined_function()
undefined_function();

?>

此外,所有的Parse error(比如说少写了分号之类的错误)都无法捕捉,不过换个角度看,解析错误的代码本身就不应该发布,甚至都不应该进入版本库,关于这一点,我以前写过一篇《Subversion钩子》,里面介绍了如何利用Subversion钩子做代码语法检查。

似乎应该顺水推舟接着写点介绍异常的文字才好,可惜时间不早了,还是洗洗睡吧。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2012-05-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
[PHP] 自定义错误处理
关闭掉默认的错误提示,注册自己的错误提示 Application.php <?php class Application{ public static function main(){
唯一Chat
2019/09/10
4530
[PHP] 自定义错误处理
php错误处理和异常处理
Error 层次结构 - Throwable (php7) - Error - ArithmeticError - DivisionByZeroError - AssertionError - CompileError - ParseError - TypeError - ArgumentCountError - Exception ... 什么是php错误? 属于php脚本自身的问题,大部分情况是由错误的语法,
友儿
2022/09/11
1K0
PHP与500错误
PHP开发过程中经常会遇到返回500错误的情况,而且body体中也没有任何调试(可用)内容。这个时候你就需要慢慢调试了(打断点,开调试模式等),但如果是现网,这个错误就比较让人抓狂了,既不好打断点也不能开调试模式。但既然是错误,总是会有处理方法,下面就一步步分析500的成因及处理方案。
yaxin
2019/03/07
7.7K0
PHP与500错误
一起搞懂PHP的错误和异常(一)
在PHP的学习过程中,我们会接触到两个概念,一个是错误,一个是异常。啥玩意?他们不是一个东西嘛?如果接触过Java、C#之类的纯面向对象语言的同学,可能对异常是没有什么问题,毕竟所有的问题都可以try...catch来解决。但是像PHP这种从面向过程发展到面向对象的语言来说,错误和异常就是两个完全不同的东西了。
硬核项目经理
2020/04/26
1.5K0
[PHP] 命令行执行整合pathinfo模拟定时任务
现在执行其他方法是同步的,可以再优化成开新线程执行这些方法,就不会阻塞主线程的定时了
唯一Chat
2019/09/10
3060
[PHP] 命令行执行整合pathinfo模拟定时任务
PHP 错误和异常处理(上)
在 PHP 5 中,程序错误会被划分为多种级别:https://www.php.net/manual/zh/errorfunc.constants.php,然后可以通过 error_reporting 函数设置报告的错误级别:
学院君
2020/07/24
6170
PHP 错误和异常处理(上)
一些简单的错误处理函数(二)
接下来,我们继续学习 PHP 中的错误处理函数。上次学习过的函数是错误信息的获取、设置、发送等功能,今天学习的内容主要是关于错误的捕获相关的函数。
硬核项目经理
2020/06/30
6170
[PHP] 实现路由映射到指定控制器
自定义路由的功能,指定到pathinfo的url上,再次升级之前的脚本 SimpleLoader.php <?php class SimpleLoader{ public static fun
唯一Chat
2019/09/10
5700
[PHP] 实现路由映射到指定控制器
PHP-错误处理
通过trigger_error产生一个用户级别的 error/warning/notice 信息
cwl_java
2020/03/26
8810
PHP框架结构设计-异常机制
1、有哪些代码需要使用异常? 理论上讲,异常可以用在任意地方,但是如果滥用异常,会导致异常链比较复杂,异常处理也比较低效
PHP开发工程师
2021/04/29
4050
php异常处理 之 BooBoo库介绍
本文介绍php开源库BooBoo,是一个处理php异常和错误的开源库,通过简单的分析代码,我们知道了实际项目中怎么正确的设置错误和异常。
zhuanxu
2018/08/23
4840
php异常处理 之 BooBoo库介绍
PHP-错误处理
​ 语法错误最常见,并且也容易修复。如:代码中遗漏一个分号。这类错误会阻止脚本的执行。
汤清丽
2019/11/03
1.7K0
PHP-错误处理
【PHP错误捕获分享】PHP捕获应用错误 简单记录并友好处理展示
为了某种目的而需要捕获系统错误,在此简单分享下某个项目中的捕获方法。 默认php错误如图 index.php /** * 捕获应用错误记录 */ function ef_error_re
96php.cn
2018/04/28
1.1K0
【PHP错误捕获分享】PHP捕获应用错误 简单记录并友好处理展示
PHP错误处理和调试(一)
当PHP脚本出现错误时,默认情况下,PHP会在浏览器上输出错误信息。这种方式对于开发环境很有用,但在生产环境中,最好将错误信息记录在日志文件中,而不是在浏览器上输出。
堕落飞鸟
2023/04/27
4610
php 抛出异常使用场景
注释:异常应该仅仅在错误情况下使用,而不应该用于在一个指定的点跳转到代码的另一个位置。
全栈程序员站长
2022/07/19
1.9K0
实例讲解PHP异常PHP异常的概念内置异常类异常可以冒泡传递自定义异常类自定义异常处理器像处理异常一样处理错误
PHP异常的概念 PHP中的异常与错误是两个不同的概念,异常是指程序运行与预期不一致,需要由开发人员手动抛出。 error_reporting(-1); $num = NULL; try { $num = 3/0; } catch (Exception $e) { echo $e->getMessage(); } 程序报Warning: Division by zero错误,而不是异常 要想程序抛出异常,需要由开发人员手动抛出: error_reporting(-1); $num = NUL
章鱼喵
2018/06/27
1.9K0
PHP错误实例详解错误级别配置项设置错误级别手动触发PHP错误自定义错误处理器脚本即将关闭前执行的函数
错误级别 在php.ini中可查看PHP的各个错误级别 ; Error Level Constants: ; E_ALL - All errors and warnings (includes E_STRICT as of PHP 5.4.0) ; E_ERROR - fatal run-time errors ; E_RECOVERABLE_ERROR - almost fatal run-time errors ; E_WARNING - r
章鱼喵
2018/06/27
1.4K0
Laravel Exceptions——异常与错误处理
本文 GitBook 地址:https://legacy.gitbook.com/book/leoyang90/laravel-source-analysis/details
码农编程进阶笔记
2021/07/20
2K0
Laravel Exceptions——异常与错误处理
PHP核心技术与最佳实践 读书笔记 第一章面向对象思想的核心概念
面向对象程序设计是一种程序设计范型,同时也是一种程序开发方法。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性,灵活性和可扩展性。
lilugirl
2019/05/26
1.2K0
PHP错误异常处理详解
异常处理(又称为错误处理)功能提供了处理程序运行时出现的错误或异常情况的方法。
黄规速
2022/04/14
2K0
推荐阅读
相关推荐
[PHP] 自定义错误处理
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验