可靠地读取PHP display_errors的值

时间:2010-01-29 00:33:00

标签: error-handling php

在我的PHP错误处理程序中,我想做类似的事情:

if (ini_get('display_errors') IS ON)) {
 // show debug info
} else {
 // show just "oops!"
}

我查看了文档和内容,但我无法确定display_errors的可能值是什么(例如“on”,0,“Yes”)以及它对什么值的作用。< / p>

我应该用什么代替“IS ON”来可靠地读取这个值?

4 个答案:

答案 0 :(得分:3)

您可以通过ini_get()获取值的字符串表示形式,display_errors可以设置的值为true\false0\1On\Off 。但是,当用户设置php.ini时,使用1On

更为常见
if (ini_get('display_errors') == "1") {
 // show debug info
}

或检查所有案例,您可以执行开关案例

ini_set('display_errors', 1);
switch (ini_get('display_errors')) {
  case "1":
  case "On":
  case "true":
    // show debug info
}

如果您更喜欢相等比较方法,请注意ini_get返回String1,如果您使用{{1}使用ini_get测试返回值使用==int,它变为真。如果您使用1,它会检查两者是否相同且类型相同。 ===String的类型不同,因此会返回int

false

使用1 == "1"; // in PHP, this returns true, it doesn't check the type. 1 === "1"; // would be false, this however checks the type. ,您可以检查ini_get('display_errors')TRUE等值 甚至是FALSE。它们将返回NULL的布尔值,0和除false以外的任何值的评估为0

true

我看到你对差异的评论,所以我决定自己测试,这是我用的

if (2) {
 echo "2 is true!"; // echos "2 is true!"
}

这个答案有点冗长,但我希望这就是你所需要的。

答案 1 :(得分:2)

根据文档,默认值为“1”。但是,您可能需要检查反向,它没有关闭:

!= FALSE!empty()

if (ini_get('display_errors') != FALSE)) 
{
     // show debug info
} 
else 
{
     // show just "oops!"
}

或者正如安东尼指出的那样,你可以查看1

if(ini_get('display_errors') == 1))

您可能还想检查error_reporting,因为这是用于控制错误显示的另一种常见设置,尽管其含义与display_errors略有不同

if(error_reporting() != 0)

答案 2 :(得分:2)

我使用以下代码:

if (in_array(strtolower(ini_get('display_errors')), array('1', 'on', 'true')) {
  // is enabled
} else {
  // is disabled
}

答案 3 :(得分:0)

使用filter_var

if ( filter_var( ini_get('display_errors'), FILTER_VALIDATE_BOOLEAN) ){

}

这应该能捕捉到 display_errors 可能被打开的所有不同方式。