记录PHP错误日志 display_errors与log_errors的区别


Posted in PHP onOctober 09, 2012

display_errors
错误回显,一般常用语开发模式,但是很多应用在正式环境中也忘记了关闭此选项。错误回显可以暴露出非常多的敏感信息,为攻击者下一步攻击提供便利。推荐关闭此选项。
display_errors = On
开启状态下,若出现错误,则报错,出现错误提示
dispaly_errors = Off
关闭状态下,若出现错误,则提示:服务器错误。但是不会出现错误提示

log_errors
在正式环境下用这个就行了,把错误信息记录在日志里。正好可以关闭错误回显。

对于PHP开发人员来说,一旦某个产品投入使用,那么第一件事就是应该将display_errors选项关闭,以免因为这些错误所透露的路径、数据库连接、数据表等信息而遭到黑客攻击。

某个产品投入使用后,难免会有错误信息,那么如何记录这些对开发人员非常有用的信息呢?
将PHP的log_errors开启即可,默认是记录到WEB服务器的日志文件里,比如Apache的error.log文件。
当然也可以记录错误日志到指定的文件中。

# vim /etc/php.inidisplay_errors = Off 
log_errors = On 
error_log = /var/log/php-error.log

另外也可以设定error_log = syslog,使这些错误信息记录到操作系统的日志里。
display_errors = Off //display中文意思是显示所以display_error=off的意思就是不显示错误了!
error_reporting 设定错误讯息回报的等级
2047我记得应该是E_ALL。
php.ini 文件中有许多配置设置。您应当已经设置好自己的 php.ini 文件并把它放在合适的目录中,就像在 Linux 上安装 PHP 和 Apache 2 的文档说明中所示的那样(请参阅 参考资料)。在调试 PHP 应用程序时,应当知道两个配置变量。下面是这两个变量及其默认值:
display_errors = Off //关闭所有错误信息,为ON时为显示所有错误信息。
error_reporting = E_ALL
E_ALL能从不良编码实践到无害提示到出错的所有信息。E_ALL 对于开发过程来说有点太细,因为它在屏幕上为一些小事(例如变量未初始化)也显示提示,会搞糟浏览器的输出
所以不建议使用2047,最好把默认值改为:error_reporting = E_ALL & ~E_NOTICE

PHP.ini中display_errors = Off失效的解决

问题:
PHP设置文件php.ini中明明已经设置display_errors = Off,但是在运行过程中,网页上还是会出现错误信息。
解决:
经查log_errors= On,据官方的说法,当这个log_errors设置为On,那么必须指定error_log文件,如果没指定或者指定的文件没有权限写入,那么照样会输出到正常的输出渠道,那么也就使得display_errors 这个指定的Off失效,错误信息还是打印了出来。于是将log_errors = Off,问题就解决了。

经常见到error_reporting(7)直意为:设定错误讯息回报的等级。

value constant
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
然而7=1+2+4
就是出错时显示1 E_ERROR 2 E_WARNING 4 E_PARSE

<?php 
//禁用错误报告 
error_reporting(0); 
//报告运行时错误 
error_reporting(E_ERROR | E_WARNING | E_PARSE); 
//报告所有错误 
error_reporting(E_ALL); 
?>
PHP 相关文章推荐
第十三节 对象串行化 [13]
Oct 09 PHP
php 判断字符串中是否包含html标签
Feb 17 PHP
kohana框架上传文件验证规则写法示例
Jul 14 PHP
PHP防盗链代码实例
Aug 27 PHP
PHP连接SQLServer2005的方法
Jan 27 PHP
php阿拉伯数字转中文人民币大写
Dec 21 PHP
PHP中使用OpenSSL生成证书及加密解密
Feb 05 PHP
php实现留言板功能
Mar 05 PHP
Django 标签筛选的实现代码(一对多、多对多)
Sep 05 PHP
php反射学习之依赖注入示例
Jun 14 PHP
关于PHP5.6+版本“No input file specified”问题的解决
Dec 11 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
Feb 15 PHP
php在程序中将网页生成word文档并提供下载的代码
Oct 09 #PHP
php排序算法(冒泡排序,快速排序)
Oct 09 #PHP
php全排列递归算法代码
Oct 09 #PHP
php列出一个目录下的所有文件的代码
Oct 09 #PHP
解析百度搜索结果link?url=参数分析 (全)
Oct 09 #PHP
仿Aspnetpager的一个PHP分页类代码 附源码下载
Oct 08 #PHP
php随机输出名人名言的代码
Oct 07 #PHP
You might like
CI框架装载器Loader.php源码分析
2014/11/04 PHP
浅谈PHP接收POST数据方式
2015/06/05 PHP
PHP+Ajax实现无刷新分页实例详解(附demo源码下载)
2016/04/07 PHP
php连接oracle数据库的方法(测试成功)
2016/05/26 PHP
PHP封装请求类实例分析【基于Yii框架】
2019/10/17 PHP
一些常用的JS功能函数(2009-06-04更新)
2009/06/04 Javascript
js href的用法
2010/05/13 Javascript
JS模拟面向对象全解(一、类型及传递)
2011/07/13 Javascript
使用JS画图之点、线、面
2015/01/12 Javascript
jQuery实现渐变下拉菜单的简单方法
2015/03/11 Javascript
jQuery实现购物车表单自动结算效果实例
2015/08/10 Javascript
JavaScript函数的调用以及参数传递
2015/10/21 Javascript
详解vue-cli开发环境跨域问题解决方案
2017/06/06 Javascript
Vue+Element使用富文本编辑器的示例代码
2017/08/14 Javascript
微信小程序注册60s倒计时功能 使用JS实现注册60s倒计时功能
2017/08/16 Javascript
Vue实例中生命周期created和mounted的区别详解
2017/08/25 Javascript
vue3.0 CLI - 3.2 路由的初级使用教程
2018/09/20 Javascript
JSON的parse()方法介绍
2019/01/31 Javascript
微信小程序第三方框架对比 之 wepy / mpvue / taro
2019/04/10 Javascript
用Vue.js方法创建模板并使用多个模板合成
2019/06/28 Javascript
JS实现简单移动端鼠标拖拽
2020/07/23 Javascript
微信小程序canvas动态时钟
2020/10/22 Javascript
手写Vue源码之数据劫持示例详解
2021/01/04 Vue.js
对PyTorch torch.stack的实例讲解
2018/07/30 Python
python中多个装饰器的执行顺序详解
2018/10/08 Python
python智联招聘爬虫并导入到excel代码实例
2019/09/09 Python
Django自定义全局403、404、500错误页面的示例代码
2020/03/08 Python
html5标记文字_动力节点Java学院整理
2017/07/11 HTML / CSS
html5 canvas绘制放射性渐变色效果
2018/01/04 HTML / CSS
Interflora澳大利亚:同日鲜花速递
2019/06/25 全球购物
介绍一下Linux文件的记录形式
2012/04/18 面试题
岗位说明书范文
2014/05/07 职场文书
银行求职信范文
2014/05/26 职场文书
歌颂党的演讲稿
2014/09/10 职场文书
结婚纪念日感言
2015/08/01 职场文书
辞职信怎么写?
2019/05/21 职场文书