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

0

Поэтому, когда я в настоящее время просматриваю 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 или что?
Благодарю!

Теги:
.htaccess

1 ответ

1

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 более оптимизирован.

  • 0
    Большое спасибо, побитовое и между моей текущей установкой ошибки и активной ошибкой имеет смысл, это помогло мне понять больше, как это работает. Тем не менее, я использовал error_reporting в качестве примера, хотя я хочу понять, как это работает, а также. Вопрос, который мне все еще интересен : что если мы сделаем опечатку в .htaccess или в php.ini , что произойдет? Если он находится в .htaccess будет ли он принимать значение из php.ini ? Если в php.ini есть опечатка, что тогда? Я попытался поэкспериментировать, и значение изменилось только в Local Value . Так как же php.ini получает его значения?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню