打开php的报错机制,PHP 错误和异常处理机制

七、php 的错误和异常处理机制

7.1、错误处理

7.1.1、使用简单的die语句if(!flie_exists("luluyii.text")){

die("文件不存在');

}else{

//打开文件操作

}file_exists("luluyii.txt") or die("文件不存在");

7.1.2、PHP error_reporting()

错误控制函数功能详解

(1)定义和用法:error_reporting() 设置 PHP 的报错级别并返回当前级别。

(2)函数语法:error_reporting(report_level)

(3)如果参数 level 未指定,当前报错级别将被返回。下面几项是 level 可能的值:

76627b17686334763e3d2a8be5624bef.gif

(4)案例

任意数目的以上选项都可以用“或”来连接(用 OR 或 |),这样可以报告所有需要的各级别错误。

例如,下面的代码关闭了用户自定义的错误和警告,执行了某些操作,然后恢复到原始的报错级别://禁用错误报告

error_reporting(0);

//报告运行时错误

error_reporting(E_ERROR | E_WARNING | E_PARSE);

//报告所有错误

error_reporting(E_ALL);

php.ini 中关于错误级别的配置:error_reporting = E_ALL & ~E_NOTICE(一般都是这样配置)

7.1.3、设置调试PHP,debug php输出所有错误信息

①、任意环境下调试php,debug php

在不管php.ini配置的情况下开启php调试、php debug,在你需要调试的php文件首行中加入ini_set('display_errors',1);            //错误信息

ini_set('display_startup_errors',1);    //php启动错误信息

error_reporting(-1);                    //打印出所有的 错误信息

ini_set('error_log', dirname(__FILE__) . '/error_log.txt'); //将出错信息输出到一个文本文件

②、开发环境调试php,debug php php.ini 配置;显示错误信息

display_errors = On

;显示php开始错误信息

display_startup_errors = On

;日志记录错误信息

log_errors = On

7.1.4、用户自定义错误处理器

(一般用于处理语法错误)error_function (error_level,error_message,error_file,error_line,error_context)

其中 error_level 和 error_message 必须有

(1)案例入门function my_error($errno,$errmes){

echo "错误值=".$errno.",错误信息=".$errmes;

exit();

}//若出现 E_WARNING 这个级别的错误,则调用 my_error 函数

set_error_handle("my_error",E_WARNING);

$fp = fopen("luluyii.txt");

输出:错误值=2,错误信息= fopen() expects at least 2 paraments ,1 given

7.1.5、错误触发器 trigger_error

(一般用于处理逻辑错误)

(1)trigger_error() 用于触发一个用户级别的错误条件,如:E_USER_NOTICE/WARNING/ERROR,

它能结合内置的错误处理器所关联,或者可以使用用户自定义的函数作为新的错误处理程序。

(2)案例$age = 500;

if($age > 100){

trigger_error("输入年龄过大",E_USER_WARNING);

exit();

}

输出:Warning: 输入的年龄过大

7.1.6、php错误日记保存

(1)bool error_log ( string $message [, int $message_type = 0 [, string $destination [, string $extra_headers ]]] )

把错误信息发送到 web 服务器的错误日志,或者到一个文件里。

常用的$message_type=3,此时message将会被发送到位置为destination的文件里,字符message不会默认被当做新的一份

(2)案例function my_error($errno,$errmes){

$err_info = "错误号是$errno -- $errmes";

echo $err_info;

// \r\n表示向文件输入一个回车换行

error_log($err_info."\r\n",3,"d:\myerr.txt");

}

7.2、异常处理

7.2.1、基本语法try {

//可能出现错误或是异常的代码

}catch (Exception $e){

//对异常处理:自己处理或者不处理将其抛出

}

7.2.2、案例try {

addUser("lulubin");

}catch (Exception $e){

echo "失败信息是:".$e->getMessage();

throw $e;

}

function addUser($username){

if($username == "luluyii"){

//添加成功,不输出

}else{

//添加失败并抛出异常

throw new Exception("添加失败");

}

}

输出:失败信息是:添加失败

7.2.3、细节讨论

(1)当捕获到一个异常代码后try{ }块里的后续代码不再执行

(2)如果有一个异常发生,但是没有catch,则提示 Uncated Exception

(3)当 catch 一个异常,你可以处理,也可以不处理,不处理就可以 throw new Exception("信息");//定义一个顶级异常处理器

function my_exception($e){

echo "我是顶级异常处理".$e->getMessage();

}

//修改默认的顶级异常处理器函数

set_exception_handler("my_exception");

function a($val){

if($val > 100){

throw new Exception("$val > 100");

}

}

try{

a("120");

}catch (Exception $e){

//可以 catch 代码中再次抛出异常

throw $e;

}

输出:我是顶级异常处理120 > 100

(4)可以自定义异常类class MyException extends Exception{ }

(5)使用多个 catch 块可以捕获不同种类的异常try{

//第一句话

//第二句话

}catch (Exception $e){

//处理/抛出

}catch (Exception $e){

//处理/抛出

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值