当前位置: 首页 > 编程日记 > 正文

PHP-错误处理

错误处理

一、错误的分类

1、语法错误:

程序没法运行,直接提示语法错误。

2、运行时错误:

只有程序运行到某行,或在某些特定的情形下运行才会发生的错误。

3、逻辑错误:

程序从头到尾运行都没有发生(并提示)错误,但程序运行计算的结果是错误的。

我们程序员主要面对的和要处理(应付)的错误,就是运行时错误。

二、错误的分级

php中,将各种错误,分门别类,依据不同的严重程度和产生的来源(机制),将各种错误分为大约10几个级别。

每个级别的错误,都对应一个内部的名称——系统常量!

1、系统错误:

①E_ERROR:系统严重错误

一发生,程序立即停止执行。

该错误一般希望马上。

②E_WARNING:系统警告

一发生,提示错误,并继续执行。

通常该错误希望能够在“下一工作日”去处理掉(解决)。

③E_PARSE:语法错误

  一发生,提示错误,而且代码完全不会运行——在运行之前先检查语法。

④E_NOTICE:系统提示

  一发生,提示错误,并继续执行。

  发个邮件通知一下,自己安排时间有空去解决。

他们的本质是什么呢?

可见他们只是一个系统内部常量(整数常量);实际上,这些常量(代号)是供我们对对该类错误进行“控制”的标示符而已。

2、用户自定义错误

只有3个:

①E_USER_ERROR;

②E_USER_WARNING;

③E_USER_NOTICE;

我们可以在程序中,自己创建(生成)错误——是为了针对某些数据的不合理情形,而创建的错误。

  比如:让用户填写年龄, 18ok,但填写188就是不合理——从数字角度本身是没有问题。

3、其他:

①E_ALL; 代表所有错误——表示它可以“包括”错误。

②E_STRICT: 代表“严格性”语法检查错误——某种语法是可以执行的,但在当前的php版本中是不欢迎使用。

三、错误的触发

1、正常触发:

程序运行时确实发生了运行时错误——也可能是语法检查错误。

3种常见的运行时错误:

2、人工触发

就是由程序员通过程序代码而“产生”一个错误。

语法:

trigger_error(“错误提示”  用户错误代号);

应用中,通常是需要检测(判断)数据的有效性,以决定是否触发相应错误,比如:

四、错误的显示控制

网页中显示(提示)错误信息,是可以进行控制的,有2种途径:

1,在php.ini文件中设定,对所有php程序都有效;

2,在当前脚本文件中,只对当前脚步文件有效。

错误的显示有2个方面可以进行控制;

1,设定是否显示:display_error:

php.ini中;display_error = On; //表示显示, Off表示不显示;

  (显示)

  不显示

脚本中:  ini_set(“display_error”,  1);  //1表示显示, 0表示不显示,也可以用truefalse

  脚本中的设定优先级高。

2,设定显示哪些级别的错误——依赖与第一项设定为显示的情况。

(1)php.ini文件中:

error_reporting = E_NOTICE;   //只显示E_NOTICE错误

error_reporting = E_NOTICE | E_WARNING;   //显示E_NOTICEE_WARNING错误

error_reporting = E_NOTICE | E_WARNING | E_USER_ERROR;  //显示E_NOTICEE_WARNINGE_USER_ERROR错误

解释上一行::

E_NOTICE 00000000 00001000

E_WARNING: 00000000 00000010

E_USER_ERROR 00000001 00000000

或运算(|)

00000001 00001010

实际上,在开发阶段,常用的是:

error_reporting = E_ALL | E_STRICT;

它是这样的结果:

E_ALL 01110111 11111111

E_STRICT: 00001000 00000000

或运算(|)

01111111 11111111

可见,E_ALL并非真的表示“所有”,而是只有E_ALL | E_STRICT才真的表示所有

继续:如果在显示“所有”错误的基础上,只想“关闭”个别少数错误呢?

  跟状态数据的设定(关闭)道理一样,只要这么做:

error_reporting = E_ALL | E_STRICT & ~E_NOTICE //只关闭了E_NOTICE错误提示

error_reporting = E_ALL | E_STRICT & ~E_NOTICE & ~E_WARNING//关闭了2

(2)在代码中设定:

ini_set(“error_reporting”,  E_NOTICE); //只显示E_NOTICE错误

ini_set(“error_reporting”,  E_NOTICE | E_WARNING); 显示E_NOTICEE_WARNING错误

ini_set(“error_reporting”,  E_ALL | E_STRICT & ~E_NOTICE); //只关闭E_NOTICE错误

ini_set()含义可以设定几乎所有php.ini中的设定项,形式如下:

  ini_set(设定项名称 ,值);//这种设定都只对当前脚本有效,而且无需重启apache,很方便。

另一个对应函数是:ini_get(“设定项名称”);//用于获取某项的值。

五、记录错误日志

在开发阶段,我们通常都是显示所有错误——意图解决错误;在产品阶段,我们通常都是隐藏所有错误——并同时将错误信息记录到文件中——错误日志文件。

  我们可以自己查看错误日志以解决开发阶段没有发现的错误问题。

  记录错误日志同样有2种途径:

1,在Php.ini文件中设定:

log_errors = On //用于设定是否记录错误日志,On记录,Off不记录

error_log = “错误日志文件名”; //设定错误日志的文件名

  此时,该文件没有给定路径,则系统会在每个文件夹下建立该文件并记录进去。

可见,页面中显示的错误提示内容,和日志文件中记录的错误信息内容,一样。

error_log还有一个特殊值可以使用:

error_log = syslog; //此时不会记录错误日志文件,而是把错误信息写入到系统错误日志中

  则结果为:

2,在当前脚本文件中:

ini_set(“log_errors” , On); //或者Off

ini_set(“error_log”, ‘err1.log’); //后缀随便用

ini_set(“error_log”, ‘err2.txt’);

ini_set(“error_log”, ‘err3.html’);

int_set(“error_log”, syslog); //记录到操作系统日志中。

六、自定义错误处理

以上的错误处理,不管是显示错误,还是记录错误日志,都是php语言内部实现的。我们只是几个简单的设定是否显示或是否记录或显示哪些,或记录到哪里。

则:自定义错误处理,就可以让我们自己完全控制错误的提示内容

做法非常简单:

1,设定要用来进行自定义处理错误的自定义函数名;

2,自己去定义该函数,并在其中进行任何错误信息的输出(或记录)。

这两件事做好后,一旦发生错误,则系统就会调用该函数去执行里面的代码——想干嘛干嘛。

注意:上述自定义处理错误的函数中,只作了“显示错误”的工作,而没有做“记录错误日志”的工作,这需要后续“操作文件”的知识。

测试代码:

则界面显示结果:

几点说明:

1,一定是用自定义错误处理程序,则系统不再处理错误。

2,但:如果一旦发生严重错误(E_ERRORE_USER_ERROR),则立即停止程序,并也不去调用自定义错误处理——此时系统错误处理工作会照常进行——即对于严重错误,自定义错误处理函数处理不了。

转载于:https://www.cnblogs.com/wjglm/p/9713477.html

相关文章:

C语言的变量的内存分配

今晚看了人家写的一个关于C语言内存分配的帖子&#xff0c;发现真是自己想找的&#xff0c;于是乎就收藏了。。。 先看一下两段代码&#xff1a; char* toStr() {char *s "abcdefghijkl";return s; } int main() {cout << toStr() << endl;return 0; }…

java打包_java工程打包(方式一)

1、新建工程myprojectpackage cn.zj;public class TestMain {public static void main(String[] args) {System.out.println("Hello World!");}}2、右击Java工程选择Export—>选择JAR file—>Next3、选择要打包的文件&#xff0c;不需要的文件不必打包&#xf…

s32v 开发板安装 apex 驱动

安装驱动 首先要获取到 apex.ko 文件&#xff0c;这个应该是硬件厂商提供&#xff0c;执行下面命令安装 首先需要给 apex.so 文件加上可执行权限 insmod apex.ko查看是否安装成功 执行下面命令&#xff0c;查看是否安装成功&#xff0c;如果安装成功&#xff0c;执行的结果中…

android常见错误与问题

1. Unable to start activity ComponentInfo 原因有很多种&#xff0c;我碰到一种&#xff1a; 可能是当前Activity里引用的View&#xff0c;并不存在于绑定的Layout里&#xff0c;而是在其他的Layout里&#xff0c;在Copy代码的时候&#xff0c;常会发生这种问题。

链式前向星(模板)

一种非常厉害的存图的数据结构&#xff01; 本质&#xff1a;模拟链表的操作&#xff0c;链式存储图。&#xff08;2&#xff0c;3都可以模拟链表的操作&#xff0c;替代链表&#xff09; &#xff08;1&#xff09;二维数组存图&#xff1a;Map[x][y]&#xff0c;一维代表出发…

tar 打包问题

项目中使用到 tar 文件&#xff0c;同一个 tar 文件解压之后在压缩&#xff0c;在程序执行的时候不能使用了 原因是 tar 对文件名长度有限制&#xff0c;当文件名过程的时候&#xff0c;使用 --formatustar 进行压缩

QT webkit学习笔记(2)

五、QWebDataBase Class介绍 QWebDataBase提供了对基于JavaScript创建的HTML 5数据库。新一代的HTML 5标准也提供对基于javaScript SQL数据库访问的支持。QWebDataBase就是这些数据库的C接口。关于HTML 5的详情&#xff0c;可以参见HTML 5 Draft Standard. 六、QWebHistory Cla…

java 数组越界异常_数组越界异常 求解决!!!

源自&#xff1a;4-3 滚动状态判断与处理数组越界异常 求解决&#xff01;&#xff01;&#xff01;package com.example.imooc;import java.io.BufferedInputStream;import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.ne…

WPF外包公司—北京动点软件WPF最新的电子书整理打包下载

最近看到很多朋友寻找以前的WPF电子书&#xff0c;其实这些书在书店目前是很难买到了&#xff0c;不过还是很经典的&#xff0c;希望大家收藏~ WPF揭秘 http://download.csdn.net/detail/ping_vip/3935100 WPF经典教程 http://kiccp.sinaapp.com/store/info/83 WPF程序设计指南…

java后端判断用户是否关注公众号

/*** 判断用户是否关注了公众号* param openid* return*/ public static boolean judgeIsFollow(String openid){int subscribe 0; // String url "https://api.weixin.qq.com/cgi-bin/user/info?access_token"token"&openid"openid"&a…

QtCreator动态编译jsoncpp完美支持x86和arm平台

如果是做嵌入式开发。 在Qt下支持JSon最好的办法&#xff0c;可能不是采用qjson这个库。QJson这个库的实例只提供了x86环境下的编译方法。 Installing QJson-------------- QJson requires:- Qt 4.0 or greater- cmake 2.6 or greater For Unix/Linux/Mac: mkdir build cd b…

RADStudio连接MySQL_使用FireDac(Delphi)在Firebird中创建数据库

我最近从AnyDac改为FireDac(8.0.5.3365).我们正在运行Delphi 2006.当我使用此组件的AnyDac版本时,我可以通过执行以下操作来创建新数据库.设置我的连接fConnection.LoginPrompt : false;fConnection.ResourceOptions.SilentMode : true;fConnection.Params.Clear;fConnection.P…

valgrind 使用 kcachegrind 查看函数运行时间

安装 首先安装运行分析函数时间的工具 kcachegrind 下载安装包 http://kcachegrind.sourceforge.net/&#xff0c;下载最新的 tar.gz 文件 解压文件&#xff0c;进入解压之后的目录&#xff0c;从 README 中可以找到安装方式&#xff0c;这里记录一下 cmake . make -j8 sudo …

Red Hat Enteripse Linux5下配置yum源的方法

1。确保RHEL5中已经安装了yum。2。修改源配置文件 &#xff03;gedit /etc/yum.repos.d/CentOS-Base.repo在其中加入以下内容[base]nameCentOS-5-Base#mirrorlisthttp://mirrorlist.centos.org/?release$releasever5&arch$basearch&repoos#baseurlhttp://mirror.cento…

echarts如何修改散点大小

由于工作需要 懵懵懂懂接触到了echarts 很牛逼 遇到的问题是如何修改散点图中点点的大小&#xff0c;其他的图我没有涉及哦~ demo地址 http://www.echartsjs.com/examples/editor.html?cscatter-single-axis 找到左侧代码 1 symbolSize: function (dataItem) { 2 3 return da…

字节跳动java笔试题目_牛客网--字节跳动面试题--特征提取

牛客网--字节跳动面试题--特征提取博客说明文章所涉及的资料来自互联网整理和个人总结&#xff0c;意在于个人学习和经验汇总&#xff0c;如有什么地方侵权&#xff0c;请联系本人删除&#xff0c;谢谢&#xff01;来源链接&#xff1a;特征提取 来源&#xff1a;牛客网题目小明…

基于php下载文件的详解

基于php下载文件的详解 本篇文章是对php下载文件进行了详细的分析介绍&#xff0c;需要的朋友参考下php下载文件&#xff0c;比如txt文件。出现的效果就是&#xff0c;弹出浏览器自带的下载框&#xff0c;出现另存为操作。有时候会出现内存溢出和超时的现象。超时的话&#xff…

C#中DateTime.Now.Ticks的用法和说明

在C#中DateTime.Now.Ticks的常用于标示&#xff1a; 自 0001 年 1 月 1 日午夜 12:00:00以来&#xff0c;到当前时间为止&#xff1a;以0.1纳秒(1纳秒0.00000 0001秒)为单位的时间间隔数。用于非常精确的计算中使用。转载于:https://www.cnblogs.com/woaic/archive/2012/09/13/…

spring入门(二) 使用注解代替xml配置

1.导包(略) 2.applicationContext.xml如下: 1 <?xml version"1.0" encoding"UTF-8"?>2 <beans xmlns"http://www.springframework.org/schema/beans"3 xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"4 …

qt 找不到 -lpulse-mainloop-glib,找不到 -lpulse问题

问题&#xff1a;使用 QT 编写视频展现程序报错找不到运行时库文件 解决办法&#xff1a; 首先 sudo find / -name libpulse.so* 然后 sudo cp /usr/lib/x86_64-linux-gnu/libpulse.so.0 /usr/lib/libpulse.so 对于libpulse-mainloop-glib 首先find / -name libpulse-mainl…

INNO SETUP 获得命令行参数

INNO SETUP 获得命令行参数 原文 http://www.cnblogs.com/ahuo/archive/2009/07/30/1534998.html [Code]function GetMyParam(PName:String):String;var CmdLine :String; CmdLineLen :Integer; i :Integer;begin CmdLineLen:ParamCount(); fori:0to CmdLineLen dobeg…

java父子表_数据库二维表转父子关系,java,stream,list

需求描述&#xff1a;把数据库中的省市二维表&#xff0c;查询到内存中后&#xff0c;转换为父子层级关系。通过jdk8中的stream方式实现。数据关系&#xff1a;320004 福建省 320507 南平市430000 湖南省 430100 长沙市320000 江苏省 320583 昆山市…

java 概述

概述&#xff1a; 1.在java中&#xff0c;数据类型具有固定的大小&#xff0c;这消除了代码移植时令人头痛的主要问题。2.在网页中运行java程序成为applet3.public成为访问修饰符&#xff0c;它用于控制程序的其它部分对这段代码的访问级别。4.单引号的数据是char类型&#xff…

HOOK 技术

在介绍 截获系统消息钩子 之前&#xff0c;这几个函数是密切相关的&#xff1a; SetWindowsHookEx() 介绍&#xff1a; 功能&#xff1a;将应用程序定义的挂钩过程安装到挂钩链中。 函数原型&#xff1a;HHOOK SetWindowsHookEx( int idHook, // 钩子类型。…

QT 中使用 OpenCv 的 CascadeClassifier 报错

问题 在 QT 中调用 OpenCv 的 CascadeClassifier 进行人脸框检测的时候&#xff0c;在构造函数中进行检测器的初始化&#xff0c;随后调用相机读取图片的时候就会报错&#xff0c;报的错误是 Segment Fault &#xff08;段错误&#xff09; 解决 尝试使用 gdb&#xff0c;va…

java vuser脚本_loadrunner12中JavaVuser脚本的编写

1、环境准备&#xff1a;友情提示&#xff1a;用本地环境&#xff0c;不要用虚拟机LoadRunner11----->对应JDK1.6版本(32位)LoadRunner12----->对应JDK1.7版本(32位)(一)、JDK下载安装完成后&#xff0c;配置环境变量&#xff1a;1)、系统变量→新建 JAVA_HOME 变量 &…

IT阅读——关于“业务”

本文转自http://www.cnblogs.com/beijiguangyong/archive/2012/11/12/2767054.html 开发当中常常听说“业务”这个词&#xff0c;什么“业务为王”之类的词不绝于耳&#xff0c;那么什么是业务&#xff1f; 百度上的解释是&#xff1a;“‘业务’更白话一些来说&#xff0c;就是…

SSH无需密码密钥登录

2019独角兽企业重金招聘Python工程师标准>>> 无密码ssh登录的主要操作简单概述为&#xff0c;将本机中的ssh密钥对中的公钥如id_rsa.pub拷贝到目标机器的ssh验证文件authorized_keys中。 1、简洁操作步骤 摘录一 &#xff1a;使用ssh-copy-id 在192.168.42.142机器…

5-4 图片修补

import cv2 import numpy as np img cv2.imread(image0.jpg,1) for i in range(200,300): # 直接修改像素值 从200画到300这样一个位置上img[i,200] (255,255,255)#当前这样一根线占三个像素img[i,2001] (255,255,255)img[i,200-1] (255,255,255) for i in range(150,250):…

OpenCV 像素存储

像素存储 OpenCV 中图像矩阵的大小取决于所用的颜色模型&#xff0c;更准确的说是取决于图像所用到的通道数。 如果使用的是灰度图&#xff0c;矩阵大概如图所示&#xff1a; 如果使用的是多通道的图像&#xff0c;矩阵中的列会包含多个子列&#xff0c;子列的个数和通道数相…