PHP中的错误信息

 
php.ini中配置错误消息
在PHP4中,没有异常 Exception这个概念,只有 错误Error。我们可以通过修改php.ini 文件来配置用户端输出的错误信息。
在php.ini 中,一个分号 ; 表示注释。
Php.ini 将能够显示的错误类型分为如下种类。
; E_ALL -所有的错误和警告,(不包含E_STRICT).
; E_ERROR -致命的运行时错误
; E_RECOVERABLE_ERROR -可由异常处理机制所捕捉 (catch/handle) 的错误
; E_WARNING - 运行时的警告(非致命错误)
; E_PARSE -编译时解析错误
; E_NOTICE - 运行时的提示,这些提示常常是代码中的bug引起的,也许是故意的(如使用一个未初始化的变量,事实上它被自动初始化成一个空字符串) 。
; E_STRICT - 运行时提示,能够给于PHP建议,以改变你的代码,以获得最好的协同性,并完善代码的兼容性。
; E_CORE_ERROR - PHP 初始化启动过程中的致命错误。
; E_CORE_WARNING - PHP 初始化启动过程中的非致命错误。
; E_COMPILE_ERROR - 致命的编译错误。
; E_COMPILE_WARNING – 编译错误(非致命的错误)。
; E_USER_ERROR - 用户错误信息。
; E_USER_WARNING - 用户警告信息。
; E_USER_NOTICE -用户提示信息。

在php.ini 中error_reporting 控制输出到用户端的消息种类。
以下几种是php.ini 中推荐的几种配置。
error_reporting = E_ALL  表示输出所有的信息。
error_reporting = E_ALL & ~E_NOTICE 表示输出所有的错误,除了提示。
error_reporting = E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR  表示输出所有的 ERROR 信息。
在php.ini 中,display_errors可以设置是否将以上设置的错误信息输出到用户端。
display_errors = On 输出到用户端(调试代码时候,打开这项更方便)

display_errors = OFF 消息将不会输出到用户端(最终发布给用户时记得改成off)
php中错误消息处理
在php中,对于错误处理非常的宽松。php系统会尽量让程序运行下去,除非遇到致命错误。
例5-2-1.php
代码片段
例:5-2-1.php
< br/><br/><br/>
< ?php
echo "start......<br/>" ;
echo $t; echo "run......<br/>" ;
echo $b = 100/0; echo "run......<br/>" ;
$a = new A(); echo "end........<br/>";
?>
执行结果
例:5-2-1.php
start......
run...... Warning: Division by zero in 5-2-1.php on line 6
run...... Fatal error: Class 'A' not found in 5-2-1.php on line 8
第5行,直接打印一个未赋值变量$t时候,系统报出一个 Notice,未定义变量。
第7行,做除以0的运算时,系统报出一个Warning,提示有除以0这样的警告,程序依然在运行。
第9行,当实例化一个不存在的类的时候,发生致命错误,程序终止运行。
再次提示:如果不想显示错误信息给用户看到,设置php.ini中
display_errors = OFF
php代码中调整错误级别
除了在php.ini文件中可以调整错误消息的显示级别外,在php代码中也可以自定义消息显示的级别。

PHP提供了一个方便的调整函数。
int error_reporting ( [int level] )
使用这个函数可以定义当前php页面中错误消息的显示级别。参数level使用了二进制掩码组合的方式。
1  E_ERROR
2  E_WARNING
4  E_PARSE
8  E_NOTICE
16  E_CORE_ERROR
32  E_CORE_WARNING
64  E_COMPILE_ERROR
128  E_COMPILE_WARNING
256  E_USER_ERROR
512  E_USER_WARNING
1024  E_USER_NOTICE
2047  E_ALL
2048  E_STRICT
4096  E_RECOVERABLE_ERROR
例5-2-2.php
代码片段
例:5-2-2.php<br/><br/><br/>
< ?php
error_reporting(0);
//关闭所有错误显示
//error_reporting(E_ERROR | E_WARNING | E_PARSE);
//error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
//error_reporting(E_ALL ^ E_NOTICE); //php.ini错误值。
//error_reporting(E_ALL); //显示所有错误信息。
//ini_set('error_reporting', E_ALL);
//error_reporting(E_ALL)同样效果的代码。
echo "start......<br/>" ;
echo $t; echo "run......<br/>" ;
echo $b = 100/0; echo "run......<br/>" ;
$a = new A();
echo "end........<br/>"; ?>
执行结果
例:5-2-2.php
start......
run......
run......
自定义错误处理
在php中,可以自定义对错误处理的方式。首先要自定义一个错误处理函数,然后使用 set_error_handler()函数向系统声明错误处理函数。代码中产生的错误就会使用这个错误处理函数了。
使用trigger_error()函数,可以触发一个error。例如trigger_error("age you input must >= 0", E_USER_ERROR),触发自己的错误信息。
例:5-2-3.php
代码片段
例:5-2-3.php
< br/><br/><br/>
< ?php
function myErrorHandler($errno, $errstr, $errfile, $errline) {
switch ($errno) {
case E_USER_ERROR:
echo "<b>My ERROR</b> [$errno] $errstr<br />\n";
echo " Fatal error in line $errline of file $errfile";
echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />\n";
echo "Aborting...<br />\n";
exit(1);
break;
case E_USER_WARNING:
echo "<b>My WARNING</b> [$errno] $errstr<br />\n";
break;
case E_USER_NOTICE:
echo "<b>My NOTICE</b> [$errno] $errstr<br />\n";
break;
default: echo "Unknown error type: [$errno] $errstr<br />\n";
break;
}
}
set_error_handler("myErrorHandler"); //定义错误处理函数. $age = -100;
//假设出现了负数的年龄,这明显是错误的。
if ($age < 0) {
trigger_error("age you input must >= 0", E_USER_ERROR);
//触发错误; }
?>
执行结果
例:5-2-3.php
My ERROR [256] age you input must >= 0 Fatal error in line 27 of file D5-2-3.php, PHP 5.1.1 (WINNT) Aborting...

PHP中的错误信息的更多相关文章

  1. 未指定的错误,发生了一个 Oracle 错误,但无法从 Oracle 中检索错误信息。数据类型不被支持。

    未指定的错误,发生了一个 Oracle 错误,但无法从 Oracle 中检索错误信息.数据类型不被支持. 博客分类: 雅芳生涯 .Net VB C# OracleMicrosoftSecurity  ...

  2. 在ASP.NET 5中显示错误信息

    在 ASP.NET 5 中如果不进行显示错误信息的相关配置,在发生错误时,在浏览器中只能看到空白页面. 显示错误信息的配置方法如下: 1)在 project.json 中添加对 Microsoft.A ...

  3. [转]Jquery中AJAX错误信息调试参考

    下面是Jquery中AJAX参数详细列表: 参数名 类型 描述 url String (默认: 当前页地址) 发送请求的地址. type String (默认: "GET") 请求 ...

  4. SpringMVC+HibernateValidator,配置在properties文件中的错误信息回显前端页面出现中文乱码

    问题: 后台在springMVC中使用hibernate-validator做参数校验的时候(validator具体使用方法见GOOGLE),用properties文件配置了校验失败的错误信息.发现回 ...

  5. PHP编译过程中常见错误信息的解决方法

    在CentOS编译PHP5的时候有时会遇到以下的一些错误信息,基本上都可以通过yum安装相应的库来解决.以下是具体的一些解决办法: checking for BZip2 support… yes ch ...

  6. Abp中打开错误信息输出

    Abp默认是不向客户端输出错误日志的,导致有些内部报错既不能中断,也没有信息输出.此时打开日志输出开关即可.在xxModule类中PreInitialize()方法里 Configuration.Mo ...

  7. 在block函数中规避错误信息 "capturing self strongly in this block is likely to lead to a retain cycle”

    以形如 _fontValueChangedBlock = ^(){ [self.fontSmallButton addTarget:self action:@selector(btnFontSmall ...

  8. CentOS编译PHP过程中常见错误信息的解决方法

    原文链接:http://www.linuxidc.com/Linux/2014-05/102327.htm ********************************************** ...

  9. 遍历ModelState中存储的错误信息

    在服务器端验证中,有时我们添加了一个ModelError,然后还需要将该信息以JS的形式返回到客户端.如: [HttpPost] public ActionResult Index(LogOnMode ...

随机推荐

  1. JavaIo编程基础复习

    什么是Io io是指Input和Output,指输入和输出 Input是指外部读入数据到内存,例如读取一个文件,或者从网络中读取 Output是指把内存中的数据输出到外部,例如写文件,输出到网络 什么 ...

  2. CentOS7.2编译配置LNMP环境(MySQL5.7.20,PHP7.0.24)

    一,     查看系统版本及内核版本 二,     编译安装nginx 1,          新建nginx用户 useradd -s /sbin/nologin -M nginx 2,       ...

  3. Code Forces 644A Parliament of Berland

    A. Parliament of Berland time limit per test1 second memory limit per test256 megabytes inputstandar ...

  4. Foj1683矩阵快速幂水题

    Foj 1683 纪念SlingShot 题目链接:http://acm.fzu.edu.cn/problem.php?pid=1683 题目:已知 F(n)=3 * F(n-1)+2 * F(n-2 ...

  5. 在Mac下使用ll,la,l

    一: 用户目录下建立一个脚本“.bash_profile”,并输入以下内容即可: alias ll='ls -alF' alias la='ls -A' alias l='ls -CF' 二: sou ...

  6. python的os模块命令

    https://www.cnblogs.com/weiyiming007/p/8493913.html

  7. 我不想用for循环

    为什么要挑战自己在代码里不写for loop?因为这样可以迫使你去使用比较高级.地道的语法或库.文中以python为例子,讲了不少大家其实在别人的代码里都见过.但自己很少用的语法. 这是一个挑战.我要 ...

  8. python小数据池,代码块的最详细、深入剖析

    代码块: Python程序是由代码块构造的.块是 一个python程序的文本,他是作为一个单元执行的. 代码块:一个模块,一个函数,一个类,一个文件等都是一个代码块. 而作为交互方式输入的每个命令都是 ...

  9. LightOJ1003---Drunk(拓扑排序判环)

    One of my friends is always drunk. So, sometimes I get a bit confused whether he is drunk or not. So ...

  10. BS一机双屏的解决方式

    一.WebSocket通讯 WebSocket protocol 是HTML5一种新的协议.它实现了浏览器与server全双工通信. 为保证socket不间断.使用下面类库进行socket通讯. ht ...