php基础之错误处理
2016-09-20 11:37
183 查看
错误分类
语法错误:程序运行前都会检测语法,如果语法有问题,则不会运行,一般IDE会帮我们check了。运行时错误:程序语法检测通过,在运行期间发生的错误,一般分为三种->提示性错误 警告性错误 致命错误
逻辑错误:程序本身可以正常执行,但输出结果和预期不符。
错误分级
php中,将各种错误进行了不同级别的划分,大约有十多个级别,这就是技术层面的错误分级。每个级别的错误都有相应代号,就是系统内部定义的一个常量。
常见的错误级别有如下几种:
echo "<pre>"; // 系统常见错误 echo "<br> E_ERROR = " . E_ERROR . ",\t\t其对于的二进制值为:" . getBinStr(E_ERROR); echo "<br> E_WARNING = " . E_WARNING . ",\t\t其对于的二进制值为:" . getBinStr(E_WARNING); echo "<br> E_NOTICE = " . E_NOTICE . ",\t\t其对于的二进制值为:" . getBinStr(E_NOTICE); echo E_NOTICE; // 用户自定义错误 echo "<br> E_USER_ERROR = " . E_USER_ERROR . ",\t其对于的二进制值为:" . getBinStr(E_USER_ERROR); echo "<br> E_USER_WARNING = " . E_USER_WARNING . ",\t其对于的二进制值为:" . getBinStr(E_USER_WARNING); echo "<br> E_USER_NOTICE = " . E_USER_NOTICE . ",\t其对于的二进制值为:" . getBinStr(E_USER_NOTICE); // 其他 echo "<br> E_STRICT = " . E_STRICT . ",\t其对于的二进制值为:" . getBinStr(E_STRICT); echo "<br> E_ALL = " . E_ALL . ",\t\t其对于的二进制值为:" . getBinStr(E_ALL); echo "</pre>"; function getBinStr($e) { $s = decbin($e); $s1 = str_pad($s, 16, "0", STR_PAD_LEFT); return $s1; }
输出结果为:
E_ERROR = 1, 其对于的二进制值为:0000000000000001 E_WARNING = 2, 其对于的二进制值为:0000000000000010 E_NOTICE = 8, 其对于的二进制值为:00000000000010008 E_USER_ERROR = 256, 其对于的二进制值为:0000000100000000 E_USER_WARNING = 512, 其对于的二进制值为:0000001000000000 E_USER_NOTICE = 1024, 其对于的二进制值为:0000010000000000 E_STRICT = 2048, 其对于的二进制值为:0000100000000000 E_ALL = 32767, 其对于的二进制值为:0111111111111111
错误的触发
系统触发
程序运行中,确实出现了某种错误,此时系统就会报错。常见的有以下三种:E_NOTICE
提示性错误,会输出错误提示,并继续执行后面的代码
echo $a;
Notice: Undefined variable: a in D:\PhpstormProjects\study\day05\php_error_record.php on line 31
比如使用了未定义的变量。
E_WARNING
警告性错误:会输出错误提示,并继续执行后续代码(也可能看具体情况,比如require),比如引用了不存在的文件
include ".test.php";
Warning: include(.test.php): failed to open stream: No such file or directory in D:\PhpstormProjects\study\day05\php_error_record.php on line 37
E_ERROR
致命错误,导致程序无法执行后续语句,比如调用一个不存在的函数
unDefinedFuntion();
Fatal error: Call to undefined function unDefinedFuntion() in D:\PhpstormProjects\study\day05\php_error_record.php on line 37
自定义触发
当我们在处理某些数据时,数据本身没有问题,可能和我们当前的场景业务来说是不满足的,这时候,就需要我们自己去主动触发一个错误,来表示数据的非法性。示例如下:
//trigger_error("错误提示内容",3种用户错误代号之一); //如果出发了E_USER_ERROR,也会终止后面代码的执行 trigger_error("主动触发错误",E_USER_NOTICE);
( ! ) Notice: 主动触发错误 in D:\PhpstormProjects\study\day05\php_error_record.php on line 35 Call Stack # Time Memory Function Location 1 0.0020 143856 {main}( ) ..\php_error_record.php:0 2 0.0111 144280 trigger_error ( ) ..\php_error_record.php:35
错误日志的显示问题
是否显示错误日志
方式一:在php.ini文件中,修改是否显示错误日志的值,如下:
; Default Value: On// 默认 ; Development Value: On//开发环境 ; Production Value: Off//生产环节 ; http://php.net/display-errors display_errors = On
在此文件中修改后,需要重启才能生效。
ps:需要在apache中装载了php.ini文件,在apache的配置httpd.config中加入如下配置:
PHPIniDir “php.ini文件所在的目录”
方式二
直接在php脚本文件中修改,如:
ini_set("display_errors", 1);// 0 or false 关闭 1 or true 打开
使用php.ini配置,作用的是全局。
php脚本中通过ini_set()设置,作用的是当前文件
脚本中的设置优先于php.ini中的设置
自定义显示错误日志级别
前提是需要打开错误日志的输出。display_errors为1或true方式一
在php.ini文件中进行修改,关键词为error_reporting
; Default Value: E_ALL & ~E_NOTICE ; Development Value: E_ALL | E_STRICT ; Production Value: E_ALL & ~E_DEPRECATED ; http://php.net/error-reporting error_reporting = E_ALL
方式二
在php脚本中修改,如:
ini_set("error_reporting", E_ALL | E_STRICT);
ps:E_ALL | E_STRICT才是代表显示所有错误。
错误日志的记录
将错误信息保存到文件中,方便查阅是否开启日志记录
php.ini中:log_errors = On 或 Off php脚本中:ini_set("log_errors",1);
保存日志
方式一// 提供一个文件名,系统会自动在当前目录下建对应的文件,并把错误信息写入该文件 ini_set("error_log", "my_error.txt");
方式二
//使用一个特殊的名字,如果发生错误,则会记录在系统的日志文件中。 //控制面板->管理工具->事件查看器->window日志->应用程序 ini_set("error_log", "syslog");
自定义错误处理器
当发生错误时,由开发者对错误进行处理,而不是交由系统处理,其实就是定义一个函数。A. 设置要处理错误的函数名
set_error_handler("onErrorHandler");
B. 定义该函数,实现自己的错误处理
/** * @param $errCode 错误代号 * @param $errMsg 错误信息 * @param $errFile 错误所在的文件 * @param $errLine 错误错在的行 */ function onErrorHandler($errCode, $errMsg, $errFile, $errLine) { // do something }
好了,php简单的错误处理,简记这些了~
相关文章推荐
- php基础系列----8php中错误和异常的处理
- PHP基础之 错误处理 及 异常处理
- php基础-错误处理
- php学习之基础五 错误处理
- PHP基础知识系列:错误处理与异常处理
- php错误处理--php基础最详细教程
- php基础学习day7(接口和错误处理)
- PHP自定义错误处理程序
- PHP session 错误及mysql close 错误处理
- PHP - Manual手册 - XXXIII. Error Handling and Logging Functions错误处理和日志函数 - 概述
- PHP错误处理方式
- PHP 错误处理
- PHP 业务错误处理
- PHP自定义错误处理器处理出错信息
- php一些错误处理和技巧总结
- PHP如何抛出异常处理错误
- PHP运行错误处理集锦
- 错误处理基础指南
- php面向对象全攻略 (十一)__toString()用法 克隆对象 __call处理调用错误
- 利用PHP自定义错误处理器处理出错信息