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. zfs mount

    root@47abd5c91421:/# ls /native/sbin    autopush  cryptoadm  dhcpinfo  dlstat       flowadm     ibd_ ...

  2. git远程代码库回滚(webstorm下)

    git远程代码库回滚(webstorm下) 1. 场景 添加了一个文件[file-for-test.js]到git的控制下 进行了三次修改,并分别进行了三次commit,最后进行了一次push git ...

  3. 高性能Web服务器Nginx的配置与部署研究(9)核心模块之HTTP模块基本常用指令

    一.HTTP模块的作用是什么? Nginx的HTTP模块用于控制Nginx的HTTP进程. 二.指令 1. alias 含义:指定location使用的路径,与root类似,但不改变文件的跟路径,仅适 ...

  4. 高性能Web服务器Nginx的配置与部署研究(6)核心模块之主模块的测试常用指令

    1. daemon 含义:设置是否以守护进程模式运行 语法:daemon on|off 缺省:on 示例:daemon off; 注意:生产环境(production mode)中不要使用daemon ...

  5. 82. Remove Duplicates from Sorted List II (List)

    Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numb ...

  6. KVM下raw和qcow2格式磁盘文件IO测试

    1. Host OS 环境 CPU: Intel Xeon E5620 2.40GHz MEM: 16GB DISK: 500GB SATA OS: CentOS5.7 64bit 2. Guest ...

  7. CentOS 6.5 下安装 Sun JDK 1.7

    下载 http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html 得到 jdk-7u51-l ...

  8. poi导出excel表格

    package poiexcel; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; ...

  9. [模板]割点(tarjan)

    洛谷P3388 注意:记得tarjan的打法 注意割点的判断条件:子节点个数>2并且为根节点  当它不为根节点时并且low[to]>dfn[u] 判断时是在子节点未被记录的时候 #incl ...

  10. redis集群部署及常用的操作命令(下)

    搭建好集群之后,为了扩容需要再加入一个节点.那就再复制一个7006,改为相应的redis.conf(复制了改个port就好,如果复制的redis之前属于集群,需要把关联的node.conf之类的去掉) ...