Случайная ошибка в настройке php_value в .htaccess?

Поэтому, когда я в настоящее время вижу phpinfo() в PHP мой error_reporting устанавливается на некоторое число, которое представляет собой сумму всех значений констант ошибки, верно?
Допустим, я случайно установил значение error_reporting в какое-то странное значение случайно в .htaccess, например:

  1. -1
  2. Значение, которое больше, чем E_ALL (например, 32768, если я прав)
  3. При установке строки, я делаю опечатку (**E_AL** & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED) — опечатка в E_ALL

Что произойдет, будет ли установлено какое-то значение по умолчанию? Или из php.ini? Я попытался установить все значения выше, и все они были установлены в Local Value без проблем.
Мне интересно, что будет с любым другим значением, будет ли оно по умолчанию php.ini или как?
Спасибо!

0

Решение

PHP использует побитовые операторы, чтобы определить, следует ли сообщать об уровне ошибки .. поэтому, независимо от того, является ли ваше целое значение двоичным, оно будет побитовым & чтобы увидеть, если ошибка сообщается.

Например.
если E_DEPRECATED (не говоря, что это точно): 01, E_WARNING — 10, E_NOTICE — 100, используя E_DEPRECATED | E_WARNING | E_NOTICE выдаст двоичный файл 111, таким образом, когда сообщается об ошибке, такой как E_WARNING, он принимает установленное значение и побитовый & Чтобы определить, отображается ли отчет:

111 & 010 = True, поэтому об ошибке будет сообщено.

если вы только что использовали E_DEPRECATED | E_NOTICE, двоичный файл равен 101, поэтому 101 & 010 = Ложь, поэтому об ошибке не сообщается.

Каждый из этих двоичных файлов может быть преобразован в base10, 01 = 1, 10 = 2, 100 = 4 и т. Д.

Так что, если вам интересно, какие ошибки будут сообщаться с вашим случайным целым числом, вы можете сделать:

int & E_WARNING в вашем синтаксическом анализаторе PHP, если его значение равно True, то будет отображаться ошибка, если значение FALSE, то ошибка будет игнорироваться.

Это хорошее соглашение для изучения, так как оно очень полезно при реализации регистрации в вашем приложении, вы можете использовать ту же систему, и поэтому вам не нужно реализовывать длинный переключатель или блок if .. elseif .., чтобы определить, уровень журнала должен быть зарегистрирован или не в соответствии с конфигурацией.

  /**
* Determines whether this message should be logged based on the provided type and the set threshold
* @access protected
* @param  int $type
* @param  string   $name name of the log to check.
* @return boolean
*/
protected function should_log($type,$name='default') {
return (bool) ($this->getConfig($name)->threshold & $type);
}

таким образом, порог будет двоичным числом в вашей конфигурации (который использует константы для читабельности), то он побитовый & для предоставленного типа журнала, который возвращает True или False, чтобы определить, следует ли регистрировать сообщение в регистраторе по имени $name… гораздо более оптимизирован.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector