Поэтому, когда я в настоящее время просматриваю phpinfo()
в PHP, мой error_reporting
установлен на некоторое число, которое представляет собой сумму всех значений констант ошибки, правильно?
Скажем, я случайно установил значение error_reporting
в какое-то странное значение случайно в.htaccess, например:
(**E_AL** & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED)
- опечатка в E_ALL Что произойдет, будет ли установлено значение по умолчанию? Или от php.ini? Я попытался установить все значения выше, и все они были установлены в Local Value
без каких-либо проблем.
Мне любопытно, что произойдет с любым другим значением, будет ли оно по умолчанию для php.ini или что?
Благодарю!
PHP использует побитовые операторы, чтобы определить, следует ли сообщать об уровне ошибки.. так что независимо от того, какое значение ваших целых чисел будет бинарным, оно будет побитовым и чтобы увидеть, сообщается ли об ошибке.
Например, если E_DEPRECATED (не сказать, что это точно): 01, E_WARNING равно 10, E_NOTICE равно 100, используя E_DEPRECATED | E_WARNING | E_NOTICE будет давать двоичный код 111, поэтому, когда сообщается об ошибке, например E_WARNING, для этого потребуется установить значение, а побитовое - определить, отображается ли отчет:
111 & 010 = Правда, так что будет сообщено об ошибке.
если вы только что использовали E_DEPRECATED | E_NOTICE, двоичный код равен 101, поэтому 101 & 010 = False, поэтому ошибка не будет сообщаться.
Каждый из этих двоичных файлов может быть преобразован в base10, 01 = 1, 10 = 2, 100 = 4 и т.д.
Поэтому, если вам было интересно узнать, какие ошибки будут сообщаться с вашим случайным целым, вы можете сделать:
int & E_WARNING
в вашем парсер PHP, если его True, то будет отображаться ошибка, если его FALSE, то ошибка будет проигнорирована.
Это хорошее соглашение для изучения, так как оно очень полезно при реализации ведения журнала в вашем приложении, вы можете использовать одну и ту же систему, и поэтому вам не нужно реализовывать длинный переключатель или if.. elseif.. block, чтобы определить, уровень журнала должен быть зарегистрирован или нет в соответствии с конфигурацией.
/**
* 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
... much более оптимизирован.
error_reporting
в качестве примера, хотя я хочу понять, как это работает, а также. Вопрос, который мне все еще интересен : что если мы сделаем опечатку в.htaccess
или вphp.ini
, что произойдет? Если он находится в.htaccess
будет ли он принимать значение изphp.ini
? Если вphp.ini
есть опечатка, что тогда? Я попытался поэкспериментировать, и значение изменилось только вLocal Value
. Так как жеphp.ini
получает его значения?