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. pyinstaller 打包

    [root@mhc nsf]# pip install pyinstallerCollecting pyinstaller  Downloading PyInstaller-3.3.tar.gz (3 ...

  2. 消息队列—ActiveMQ

    1.   学习计划 1.什么是MQ 2.MQ的应用场景 3.ActiveMQ的使用方法. 4.使用消息队列实现商品同步. 2.   同步索引库分析 方案一:在manager(后台)中,添加商品的业务逻 ...

  3. OpenGL位图函数

    [OpenGL位图函数] 1.OpenGL中glBitmap用于绘制一个二值阵列. When drawn, the bitmap is positioned relative to the curre ...

  4. nodemon 的坑

    1. 我的系统是ubuntu18.04.2 的 在使用过程中不知道什么为题 nodemon 运行的项目不在前台打印了项目, 我监听的端口 9302 一直在运行, 前台看不到 我想停止掉用 ps -ef ...

  5. HTTP协议简析(二)

    HTTP响应也包含四部分内容: 响应行: 协议版本:HTTP/1.1 状态码:200 状态描述:对状态码的说明 响应头:用来规范数据,常用的有: server:服务器信息 date:响应的时间 las ...

  6. Linux下安装Nginx详细图解教程(一)

    什么是Nginx? Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器,在高连接并发的情况下N ...

  7. octomap相关

    转载自http://blog.csdn.net/linuxarmsummary/article/details/50924947 什么是octomap? RGBD SLAM的目的有两个:估计机器人的轨 ...

  8. 常用工具类——StringUtils

    /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreem ...

  9. CentOS 7 下 ifconfig command not found 解决办法

    1.查看ifconfig命令是否存在 查看 /sbin/ifconfig是否存在 2.如果ifconfig命令存在,查看环境变量设置 [root@localhost ~]# echo $PATH 如果 ...

  10. spring mvc 集成hibernate步骤

    今天从头把hibernate集成进入springMVC框架中,把过程记录下来. 1.首先要在监听器配置文件中加入hibernate支持,如下: <?xml version="1.0&q ...