您现在的位置: 365建站网 > 365文章 > PHP运行时强制显示出错信息及错误日志记录

PHP运行时强制显示出错信息及错误日志记录

文章来源:365jz.com     点击数:479    更新时间:2017-08-16 09:46   参与评论
PHP中的错误简单点儿理解就是导致PHP代码不能正常执行的各种问题的集合,错误是需要被处理的,PHP引擎在执行过程中也会对错误进行各种提示,这种提示其实也是对错误的一种处理,只不过比较粗暴而已。
PHP中与错误有关的内容可大致分为:PHP错误的类型和错误级别有关内容、PHP代码中显式的错误处理机制、PHP代码中的错误信息使用日志形式记录的有关配置内容 等。
 
error_reporting(E_ALL); 
ini_set('display_errors', '1'); 
ini_set('error_log', dirname(__FILE__) . '/error_log.txt'); //将出错信息输出到一个文本文件 

怎样输出错误信息到一个文件,同时不让错误信息出现在网站上呢,这个对线上的项目调试很好,自己可以看错误信息,但是客户端看不到!有木有办法
可以使用 set_error_handler控制

错误和日志记录
常量 说明 备注
1 E_ERROR (integer) 致命的运行时错误。这类错误一般是不可恢复的情况,例如内存分配导致的问题。后果是导致脚本终止不再继续运行。  
2 E_WARNING (integer) 运行时警告 (非致命错误)。仅给出提示信息,但是脚本不会终止运行。  
4 E_PARSE (integer) 编译时语法解析错误。解析错误仅仅由分析器产生。  
8 E_NOTICE (integer) 运行时通知。表示脚本遇到可能会表现为错误的情况,但是在可以正常运行的脚本里面也可能会有类似的通知。  
16 E_CORE_ERROR(integer) 在PHP初始化启动过程中发生的致命错误。该错误类似 E_ERROR,但是是由PHP引擎核心产生的。 since PHP 4
32 E_CORE_WARNING(integer) PHP初始化启动过程中发生的警告 (非致命错误) 。类似E_WARNING,但是是由PHP引擎核心产生的。 since PHP 4
64 E_COMPILE_ERROR(integer) 致命编译时错误。类似E_ERROR, 但是是由Zend脚本引擎产生的。 since PHP 4
128 E_COMPILE_WARNING(integer) 编译时警告 (非致命错误)。类似 E_WARNING,但是是由Zend脚本引擎产生的。 since PHP 4
256 E_USER_ERROR(integer) 用户产生的错误信息。类似 E_ERROR, 但是是由用户自己在代码中使用PHP函数 trigger_error()来产生的。 since PHP 4
512 E_USER_WARNING(integer) 用户产生的警告信息。类似 E_WARNING, 但是是由用户自己在代码中使用PHP函数 trigger_error()来产生的。 since PHP 4
1024 E_USER_NOTICE(integer) 用户产生的通知信息。类似 E_NOTICE, 但是是由用户自己在代码中使用PHP函数 trigger_error()来产生的。 since PHP 4
2048 E_STRICT (integer) 启用 PHP 对代码的修改建议,以确保代码具有最佳的互操作性和向前兼容性。 since PHP 5
4096 E_RECOVERABLE_ERROR(integer) 可被捕捉的致命错误。 它表示发生了一个可能非常危险的错误,但是还没有导致PHP引擎处于不稳定的状态。 如果该错误没有被用户自定义句柄捕获 (参见 set_error_handler()),将成为一个E_ERROR 从而脚本会终止运行。 since PHP 5.2.0
8192 E_DEPRECATED(integer) 运行时通知。启用后将会对在未来版本中可能无法正常工作的代码给出警告。 since PHP 5.3.0
16384 E_USER_DEPRECATED(integer) 用户产少的警告信息。 类似 E_DEPRECATED, 但是是由用户自己在代码中使用PHP函数 trigger_error()来产生的。 since PHP 5.3.0
30719 E_ALL (integer) E_STRICT出外的所有错误和警告信息。 30719 in PHP 5.3.x, 6143 in PHP 5.2.x, 2047 previously
记录PHP错误日志 display_errors与log_errors的区别

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

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

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

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

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,问题就解决了。 


如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛

发表评论 (479人查看0条评论)
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
昵称:
最新评论
------分隔线----------------------------

快速入口

· 365软件
· 杰创官网
· 建站工具
· 网站大全

其它栏目

· 建站教程
· 365学习

业务咨询

· 技术支持
· 服务时间:9:00-18:00
365建站网二维码

Powered by 365建站网 RSS地图 HTML地图

copyright © 2013-2024 版权所有 鄂ICP备17013400号