在.htaccess中设置php_value时出现意外错误?

时间:2015-03-03 10:54:40

标签: php .htaccess error-reporting

因此,当我在PHP中查看phpinfo()时,我的error_reporting被设置为某个数字,表示所有错误常量值的总和,对吧? 让我们说,我在.htaccess中意外地将error_reporting的值设置为某个奇怪的值,例如:

  1. -1
  2. 大于E_ALL的值(例如32768,如果我正确的话)
  3. 使用字符串设置时,我在E_ALL中输入拼写错误(**E_AL** & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED) - 拼写错误
  4. 会发生什么,是否会设置为某个默认值?还是从php.ini?我尝试设置上面的所有值,并且它们都在Local Value中设置,没有任何问题 我很好奇其他任何价值会发生什么,它会默认为php.ini还是什么? 谢谢!

1 个答案:

答案 0 :(得分:1)

PHP使用按位运算符来确定是否应该报告错误级别..所以无论你的整数值是二进制,它都会按位&查看是否报告了错误。

E.g。 如果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 = False,因此不会报告错误。

这些二进制文件中的每一个都可以转换为base10,01 = 1,10 = 2,100 = 4等。

因此,如果您对使用随机整数报告哪些错误感到好奇,可以这样做:

PHP解析器中的

int & E_WARNING,如果为True,则会显示错误,如果为FALSE则错误将被忽略。

这是一个很好的习惯,因为它在实现对应用程序的日志记录时非常有用,你可以使用相同的系统,因此你不必实现一个长开关或者如果.. 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);
  }

所以阈值将是你的配置中的二进制数(它使用常数来提高可读性)然后它就是bitwises&针对提供的返回True或False的日志类型,以确定是否按名称$name将消息记录到记录器...更加优化。