2010-01-29 3 views
1

В моем PHP обработчик ошибок я хочу сделать что-то вроде:Достоверно прочитать значение PHP display_errors

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

Я посмотреть через документы и прочее, но я не могу выяснить, какие возможные значения для display_errors (например, «on», 0, «Yes») и что он делает для какого значения.

Что я должен поставить вместо «IS ON», чтобы надёжно прочитать это значение?

ответ

2

Вы можете получить строковое представление значений через ini_get(), значения, которые display_errors может быть установлен либо, true\false, 0\1 и On\Off. Но когда пользователь установить их php.ini это чаще использовать 1 или On

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, если вы проверите возвращаемое значение с помощью 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!" 
} 

Я видел ваш комментарий о несоответствии, поэтому я решил проверить это сам, вот что я использовал

<?php 
    ini_set('display_errors', 1); 
    $verbose = ini_get('display_errors'); 
    echo $verbose; // echo's 1 

    // just to test its return values. 
    if ($verbose) { 
    echo "verbose is true"; // echos "verbose is true" 
    } 

    ini_set('display_errors', 0); 
    $verbose = ini_get('display_errors'); 
    echo $verbose; // echo's 0 

    if ($verbose) { 
    echo "verbose is not true"; // does not get evaluated 
    } 
?> 

Этот ответ немного длинно, но я надеюсь, что это то, что вам нужно.

+0

Технически это строка, и некоторые люди устанавливают ее в положение «включено». Поэтому, хотя вы можете просто проверить, равно ли оно 1, это не сработает, если вы работаете в странной среде. Таким образом, это не является надежным. –

+0

Слишком просто. >> ini_set ('display_errors', 'On'); $ verbose = ini_get ('display_errors') == 1; << Verbose теперь false, несмотря на «On». –

+1

Устанавливается в On в php.ini, но когда вы вызываете 'ini_get', он возвращает 1, является ли его строка или int –

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) 
+0

@ Chacha102 - 'ini_get' возвращает строку, вы были правы. :), но, по-видимому, неважно, сравниваете ли вы «1» или «1», я думаю, это зависит только от оператора сравнения. –

2

Я использую следующий код:

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