有的虚拟主机不让在前台显示错误,这是一种保护措施,避免一些用户使用不安全代码而被攻击,毕竟错误信息有时能暴露出很多问题.然而有时候在调试代码的时候,如果没有直接输出错误信息,就不好确定到底出了什么问题,而每次到控制面板后台去看日志也是一个麻烦的事.
最好的当然是有php.ini修改权限,这样可以自己开关一些功能,包括错误输出.不过很少虚拟主机支持这个,至少我用过的虚拟主机都不支持…
但是问题总要解决,于是有这样一个函数ini_set(),这个函数可以设置php.ini的一些值,并在代码运行时覆盖原本php.ini的设置.
error_reporting(E_ALL); //输出所有类型的错误 ini_set("display_errors","On");//设置开启错误信息输出 ini_set('error_log', dirname(__FILE__) . '/error_log.txt'); //将出错信息输出到当前代码路径下的一个文本文件 error_log.txt
当然,大多数时候我们不会想要输出所有类型的错误,因为一些输出的信息并没有影响,并不是什么安全问题,但是输出后的错误信息对页面布局造成影响,所以正常情况会屏蔽一些不需要的信息,比如我一般是用
error_reporting(E_ALL & ~E_NOTICE);
这样屏蔽掉NOTICE类型的错误,其他显示出来的问题则都是需要去解决的.
以下是错误分级,可以使用加上 &~错误类型的方式屏蔽指定类型
错误级别分为: E_ERROR:严重错误。 E_WARNING:最普通的错误类型。 E_PARSE:解析错误在编译的时候发生。 E_STRICT:这个错误级别是唯一不包含在E_ALL常量中的,为了让PHP4到PHP5的迁移更加容易。 E_NOTICE:表示运行的代码可能在操作一些未知的事情。 E_CORE_ERROR:由于扩展启动失败等导致的。 E_COMPILE_WARNING:编译的时候出现的警告,告诉用户一些不推荐使用的语法信息。 E_COMPILE_ERROR:编译错误。
当然,也可以只使用其中一个或几个,例如:
error_reporting(E_WARNING);