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

2015-01-24信息快讯网

错误回显,一般常用语开发模式,但是很多应用在正式环境中也忘记了关闭此选项。错误回显可以暴露出非常多的敏感信息,为攻击者下一步攻击提供便利。推荐关闭此选项

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); 
?> 
浅析Dos下运行php.exe,出现没有找到php_mbstring.dll 错误的解决方法
解析php session_set_save_handler 函数的用法(mysql)
浅析HTTP消息头网页缓存控制以及header常用指令介绍
关于使用key/value数据库redis和TTSERVER的心得体会
zend Framework中的Layout(模块化得布局)详解
解析在zend Farmework下如何创立一个FORM表单
解析zend Framework如何自动加载类
解析file_get_contents模仿浏览器头(user_agent)获取数据
领悟php接口中interface存在的意义
如何在smarty中增加类似foreach的功能自动加载数据
探讨:如何使用PhpDocumentor生成文档
PHP错误提示的关闭方法详解
php连接Access数据库错误及解决方法
hadoop常见错误以及处理方法详解
php错误级别的设置方法
PHP Error与Logging函数的深入理解
PHP 自定义错误处理函数trigger_error()
域名和cookie问题(域名后缀)
php在程序中将网页生成word文档并提供下载的代码
仿Aspnetpager的一个PHP分页类代码 附源码下载
PHP中数字检测is_numeric与ctype_digit的区别介绍
Linux下CoreSeek及PHP扩展模块的安装
如何获知PHP程序占用多少内存(memory_get_usage)
PHP管理内存函数 memory_get_usage()使用介绍
php获取ip的三个属性区别介绍(HTTP_X_FORWARDED_FOR,HTTP_VIA,REMOTE_ADDR)
header跳转和include包含问题详解
巧用php中的array_filter()函数去掉多维空值的代码分享
PhpMyAdmin出现export.php Missing parameter: what /export_type错误解决方法
PHP Parse Error: syntax error, unexpected $end 错误的解决办法
php错误、异常处理机制(补充)
PHP中的错误处理、异常处理机制分析
无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装(win+linux)
PHP中error_reporting()函数的用法(修改PHP屏蔽错误)
PHP函数之error_reporting(E_ALL ^ E_NOTICE)详细说明
©2014-2024 dbsqp.com