我怎样才能严格解析php解析php.ini?

时间:2018-02-16 18:50:33

标签: php

php命令似乎没有检查php.ini中的值是否有意义。这是一个例子:

$ echo 'memory_limit = foobar' > /tmp/php.ini
$ php -c /tmp -r 'printf("%s\n", ini_get("memory_limit"));'
foobar

当php.ini包含像这样的垃圾时,我怎么能要求php大声失败?

1 个答案:

答案 0 :(得分:1)

你可能不能。

  • Ini-options是预定义的类型(排序)。
  • 因此他们不会被ini解析器检查。
  • 只有注册ini选项的模块才真正解释或抱怨它们。 (他们很少这样做。)

在memory_limit的情况下,它被预定义为

PHP_INI_ENTRY("memory_limit", "128M", PHP_INI_ALL, OnChangeMemoryLimit)
  • 这意味着它只是一个字符串。
  • 它的解释留给标准字符串到长解析器zend_atol
  • 某种核心和重用函数,因此不会与错误日志交互
  • 它只关心数字和一些可选的量词后缀GM,例如
  • 其他任何内容(垃圾字符串)被解释为零。

出于memory_limit的目的,任何0值都将被丢弃。因为,你知道,这对于最大化内存使用量是没有意义的。

此处PHP还假设所有可能的php.ini中至少有一个包含某种有效或合理的默认值。这就是为什么(会说)为什么没有大声警告。它并不常见。再一次 - 我的观点 - 在某种程度上是一种有效的设计选择:不要过度优化边缘案例。