php处理错误的三种方式: 简单的die()语句; 自定义错误和错误触发器;错误日志;

1,简单的die()语句

if(!file_exists("aaa.txt")){
die("文件不存在");
}else{
$fp = fopen("aaa.txt","r");
}

  上面的代码和下面的代码功能相同

file_exists("aaa.txt") or die("文件不存在!");
$fp = fopen("aaa.txt","r");

 2,自定义错误和错误触发器

php自带错误处理器,可以自己编写错误处理器。

(2.1)创建一个自定义的错误函数非常简单,我们可以创建一个专用函数,在PHP发生错误时候调用该函数。该函数必须有能力处理至少两个参数(error level 和error message),但是可以接受最多五个参数(可选的file,line-number以及error context):

(2.2)基本语法:error_function(error_level,error_message,error_file,error_line,error_context)

(a),编写错误函数。

(b),编写set_error_handler(),通知php系统,弃用默认错误处理器,使用自定义的错误函数。

(2.3)PHP中有不同的错误级别控制

常量

描述

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以外。(在PHP6.0,E_STRRICT是E_ALL的一部分。)

(2.4)语法错误,set_error_handler()错误控制案例,此处错误适应于E_WARNING,E_NOTICE,E_RECOVERABLE_ERROR,E_ALL。

//定义了一个函数
function my_error($errno,$errmes){
echo "<font size='5' color='red'>$errno.$errmes</font>";
exit();
}
//改写set_error_handler处理器
set_error_handler("my_error",E_WARNING); //定义了一个函数
function my_error1($errno,$errmes){
echo "<font size='5' color='red'>$errno.$errmes</font>";
exit();
}
//改写set_error_handler处理器
set_error_handler("my_error1",E_NOTICE); $fp=fopen("aa.txt","r");

(2.5)逻辑错误,trigger_error()错误控制案例,这个可以在代码中编写程序,排除逻辑错误情况,没有必要使用trigger_error()。

$age = 700;
if($age > 120){
//调用触发器
trigger_error("输入年龄过大");
exit();
}

自定义一个错误处理函数(和上类似),此处适用于E_USER_ERROR,E_USER_WARNING,E_USER_NOTICE。

function my_error3($errno,$errmes){
echo "错误号是:".$errno;
}
set_error_handler("my_error3",E_USER_ERROR);//此处适用于E_user_ERROR,E_user_WARNING,E_user_NOTICE
$age = 700;
if($age > 120){
trigger_error("输入年龄过大",E_USER_ERROR);
}

  

3,PHP错误日志

基本方法使用error_log(),使用方法如下,执行完如下代码,会在代码页所在的文件夹产生myerr.txt这个文件。

function my_error3($errno,$errmes){
$err_info = "错误号是:".$errno;
echo $err_info;
date_default_timezone_set("Asia/Chongqing");
error_log("时间是".date("Y-m-d G-i-s")."--".$err_info."\r\n",3,"myerr.txt");
}
set_error_handler("my_error3",E_USER_ERROR);//此处适用于E_user_ERROR,E_user_WARNING,E_user_NOTICE
$age = 700;
if($age > 120){
trigger_error("输入年龄过大",E_USER_ERROR);
}

  

二,php的错误处理的更多相关文章

  1. oracle 11g RAC安装节点二执行结果错误CRS-5005: IP Address: 192.168.1.24 is already in use in the network

    [root@testdb11b ~]# /u01/app/oraInventory/orainstRoot.sh Changing permissions of /u01/app/oraInvento ...

  2. ArcEngine10.1二次开发错误: 无法嵌入互操作类型,请改用适用的接口

    在之前配置ArcEngine.VS2010二次开发程序的时候,遇见"无法嵌入互操作类型,请改用适用的接口"的错误,在网上查了下,下面引用解决方法. 解决方式为在提示错误的引用上面右 ...

  3. 前端监控系统(二)JS错误日志收集篇

    前端监控系统 目前已经上线,欢迎使用! 服务器搭建好了,可以着手开发了. 其实前端需要分析的数据有很多,包括,PVUV, 接口请求统计,耗时统计,JS错误统计,用户使用设备统计,用户地域分布,页面用户 ...

  4. 搭建前端监控系统(二)JS错误监控篇

    ===================================================================== 前端性能监控系统: DEMO地址    GIT代码仓库地址 ...

  5. AutoCAD.NET二次开发错误集锦

    1.CAD崩溃,错误“unhandled access violation reading”=“未将对象引用设置到对象的实例”. 2. 建模操作错误:指向给定边的指针为空. 建模操作错误:访问冲突. ...

  6. Swift--基础(二)元组 断言 错误处理

    元组(tuples) 把多个值组合成一个复合值.元组内的值可以是任意类型,并不要求是相同类型 let http404Error = (404, "Not Found") let ( ...

  7. Java进阶(十二)JDK版本错误之Unsupported major.minor version 51.0(jdk版本错误)

    错误:Unsupported major.minor version 51.0(jdk版本错误) 如果在win7下开发项目是使用的jdk版本和项目运行服务器jdk版本不同就会出现上面的问题. 用jdk ...

  8. ArcEngine二次开发错误编码对照表(转)

    阅读数:3323 每当我们在进行AE开发,出现错误时经常会出现错误代码,但是我们并不知道它到底代表什么意思,这里的而错误编码我们可以对照着找到我们需要的时候常详细信息(问题是,经常还是会出现没有错误编 ...

  9. ALERT日志中常见监听相关报错之二:ORA-3136错误的排查

    最近在多个大型系统中遇到此问题,一般来说假设client未反映异常的话能够忽略的. 假设是client登陆时遇到ORA-12170: TNS:Connect timeout occurred,能够參考 ...

  10. Java编程思想之十二 通过异常处理错误

    Java的基本概念是结构不佳的代码不能运行余下的问题必须在运行期间解决,这就需要错误源能通过某种方式,把适当的信息传递给某个接收者--该接收者将知道如何正确处理这里问题. 12.1 概念 使用异常所带 ...

随机推荐

  1. GameObject.Active

    [GameObject.Active] 用于控制一个对象是否激活,一个对象激活当且本身active=true,并且它的父结点也都active.相当API有: 1)GameObject.SetActiv ...

  2. rocketmq--push消费过程

    Rocketmq消费分为push和pull两种方式,push为被动消费类型,pull为主动消费类型,push方式最终还是会从broker中pull消息.不同于pull的是,push首先要注册消费监听器 ...

  3. ubuntu18.04 安装显卡驱动

    1.使用PPA仓库进行自动化安装 sudo add-apt-repository ppa:graphics-drivers/ppa && sudo apt update 2.查询所有u ...

  4. c++ 观察者模式(observer)

    观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新.它还有两个别名,依赖 (Dependents),发布-订阅(Publish-Subs ...

  5. Lunix7 开放指定端口

    systemctl unmask firewalld.service 此时可以正常启动Firewall了. 接下来顺便讲述一下Firewall的安装,及一些简单配置.   查看状态,看电脑上是否已经安 ...

  6. 477. Total Hamming Distance总的二进制距离

    [抄题]: The Hamming distance between two integers is the number of positions at which the correspondin ...

  7. Apache CloudStack Features

    As a mature and turnkey Infrastructure-as-a-Service (IaaS) platform, Apache CloudStack has a compreh ...

  8. Javascript 浅拷贝与深拷贝

    在了解JS的浅拷贝与深拷贝之前,我们需要先知道什么是值传递与引用传递. 在JS中,基本类型值的拷贝是按值传递的,而引用类型值的拷贝则是按引用传递的.通过值传递的变量间不会有任何牵连,互相独立:但是引用 ...

  9. Mysql中自定义函数编程

    1.语法 1.1 新建函数 Create function function_name(参数列表) returns 返回值类型 函数体 (1)函数名,应该合法的标识符,并且不应该与已有的关键字冲突. ...

  10. 打开程序出现.Net Framework Initialization Error – Unable to find a version of the runtime to run this applicatio的解决办法

    部署一个VS2010开发的程序时遇到 了一个非常奇怪的问题,客户端上已经安装了.net framework 4.0,但运行时还是会弹出错误: .Net Framework Initialization ...