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. 【BZOJ4563】[Haoi2016]放棋子 错排+高精度

    [BZOJ4563][Haoi2016]放棋子 Description 给你一个N*N的矩阵,每行有一个障碍,数据保证任意两个障碍不在同一行,任意两个障碍不在同一列,要求你在这个矩阵上放N枚棋子(障碍 ...

  2. 使用Git分支开发新特性或修复Bug与使用Git分支开发新特性或修复Bug

    使用Git分支开发新特性或修复Bug 通过分支,可以在不影响原有代码的前提下改变代码,主要用于开发新功能新特性.下 一代产品 为已经发布的正式版修复bug 团队开发时为每个人建立一个分支,从而避免相互 ...

  3. 解决;R语言使用sqldf库是报错"Failed to connect to database: Error: Access denied for user '..'@'localhost' (using password: NO) Error in !dbPreExists : invalid argument type"

    原因:在使用sqldf时,不需要加载RMySQL库 解决方案:在控制台执行释放RMySQL库加载 detach("package:RMySQL", unload=T);

  4. 巨蟒python全栈开发flask11项目开始3

    1.多玩具遥控&&websocket回锅 2.绑定玩具时添加好友的最终逻辑 3.消息&&好友列表 4.chat聊天&&对话窗口 1.多玩具遥控& ...

  5. 2017-2018-2 20165330 实验四《Android程序设计》实验报告

    下载与安装Android Studio 下载地址:Download Android Studio 安装教程参考Android开发简易教程 实验内容 码云链接 任务一 参考<Java和Androi ...

  6. TCP implements its own acknowledgment scheme to guarantee successful data delivery

    wTCP本身已经确保传输的成功性. HTTP The Definitive Guide 4.2.4 Delayed Acknowledgments Because the Internet itsel ...

  7. Spring Data之Hello World

    1. 概述 SpringData : 注意目标是使数据库的访问变得方便快捷;支持NoSQL和关系数据存储; 支持NoSQL存储: MongoDB(文档数据库) Neo4j(图形数据库) Redis(键 ...

  8. d3.js 之关联数据:data操作符

    数据可视化 在可视化工作中,一个基本出发点是将不同的数值映射到不同的可视化 元素的属性上,使其表现出各自不同的视觉特征. 比如:以数组中的每一个值为直径分别创建一个圆,我们得到三个圆: 在d3中,可视 ...

  9. 七牛云存储--内存put示例(go sdk)

    啥都不说了,居然有文档,有git为啥不提供example? 自己看代码,琢磨了一下,原来是要这么用的.这里不得不吐槽一下package的命名,为啥要去io?golang自带系统包名就有io啊,哥哥. ...

  10. 【云安全与同态加密_调研分析(1)】国外云安全标准机构——By Me

    在云计算领域,传统的信息安全管理标准如ITIL.ISO/IEC20000.ISO/IEC27001.27002.Cobit等被建议应用于云计算安全管理和控制框架的建立.此外,由于云计算本身区别于传统信 ...