PHP ci 如何开启调试模式输出详细数据库报错信息和屏蔽错误信息?

PHP ci 如何开启调试模式输出详细数据库报错信息?
由于之前测试php安全问题把数据库报错信息屏蔽掉了,导致正常开发没有输出错误信息对开发定位问题所在造成了很多不便,需要重新打开调试信息。方法总结如下:
一、php.ini 设置
display_errors = On
error_reporting = E_ALL | E_STRICT

二、ci index.php 设置
define(‘ENVIRONMENT’, ‘development’);
error_reporting(E_ALL);

三、config/database.php中修改数据库设置:
$db['default']['db_debug'] = TRUE;

生产模式屏蔽错误信息定义对应是:
define(‘ENVIRONMENT’, ‘production’); error_reporting(0); display_errors = Off $db['default']['db_debug'] = FALSE;
上面设置不止数据库的报错屏蔽掉,普通变量没定义之类的错误也会屏蔽掉的。

===================================================
PHP中error_reporting()函数的用法(修改PHP屏蔽错误)
A PHP Error was encountered
Severity: Notice
Message: Undefined variable: user
一般在默认的普通PHP文件中输出一个未定义声明的变量是不会报错误的,但在codeigniter框架下却要报错误。
如何让codeigniter不显示Notice信息? index.php中的error_reporting(E_ALL);把它改成 error_reporting(E_ALL ^ E_NOTICE);
就可以屏蔽掉这个错误,而不影响其他的报错.
error_reporting(report_level)
如果参数 level 未指定,当前报错级别将被返回。下面几项是 level 可能的值:

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
E_NOTICE 表示一般情形不记录,只有程式有错误情形时才用到,例如企图存取一个不存在的变数,或是呼叫 stat() 函式检视不存在的档案。

E_WARNING 通常都会显示出来,但不会中断程式的执行。这对除错很有效。例如:用有问题的常规表示法呼叫 ereg()。

E_ERROR 通常会显示出来,亦会中断程式执行。意即用这个遮罩无法追查到记忆体配置或其它的错误。

E_PARSE 从语法中剖析错误。
E_CORE_ERROR 类似 E_ERROR,但不包括 PHP 核心造成的错误。
E_CORE_WARNING 类似 E_WARNING,但不包括 PHP 核心错误警告。

E_ALL 所有错误和警告,除级别 E_STRICT 以外。(在 PHP 6.0,E_STRICT 是 E_ALL 的一部分)

关于error_reporting()这个函数,它是可以屏蔽到一些错误信息,但是PHP 核心造成的错误,是无法屏蔽的,因为PHP 核心造成的错误会直接导致PHP文件编译失败,因为书写格式没有按照PHP的编码规则写而造成的错误,是无法屏蔽的

常见的如下:
// Turn off all error reporting;关闭所有的错误
error_reporting(0);

// Report simple running errors;报告一个简单的运行错误
error_reporting(E_ERROR | E_WARNING | E_PARSE);

// Reporting E_NOTICE can be good too (to report uninitialized
// variables or catch variable name misspellings …);包括报告一些未初始化的变量或捕捉变量名的拼写错误
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

// Report all errors except E_NOTICE
// This is the default value set in php.ini;报告所有的错误但不包括E_NOTICE 这也是php.ini的缺省设置
error_reporting(E_ALL ^ E_NOTICE);

// Report all PHP errors (bitwise 63 may be used in PHP 3);报告所有的错误
error_reporting(E_ALL);

// Same as error_reporting(E_ALL);同上
ini_set(‘error_reporting’, E_ALL);

暂无评论

发表评论

快捷键:Ctrl+Enter