如何让php严格解析php.ini?
php命令似乎没有检查php.ini中的值是否有意义。以下是一个例子:如何让php严格解析php.ini?,php,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大声失败呢?你可能不能 Ini选项是使用类型(排序)预定义的 因此,ini解析器不会检查它们 只有注册ini选项的模块才真正解释或抱怨它们。
$ echo 'memory_limit = foobar' > /tmp/php.ini
$ php -c /tmp -r 'printf("%s\n", ini_get("memory_limit"));'
foobar
当php.ini包含像这样的垃圾时,我怎么能让php大声失败呢?你可能不能
- Ini选项是使用类型(排序)预定义的
- 因此,ini解析器不会检查它们
- 只有注册ini选项的模块才真正解释或抱怨它们。(他们很少这样做。)
PHP_INI_ENTRY("memory_limit", "128M", PHP_INI_ALL, OnChangeMemoryLimit)
- 这意味着它只是一个字符串
- 它的解释取决于长解析器的标准字符串
zend_atol
- 在某种程度上是一个核心和可重用的函数,因此不会与错误日志交互
- 它只关心数字和一些可选的量词后缀
或G
,例如M
- 其他任何内容(垃圾字符串)都被解释为零
内存限制
的目的,任何0值都被丢弃。因为,你知道,这对于最大限度地使用内存是没有意义的
这里的PHP还简单地假设所有可能的
PHP.ini
s中至少有一个包含某种有效或正常的默认值。所以,这就是为什么(我要说)对此没有大声警告的原因。这不是一般需要的。我认为,这也是一种有效的设计选择:不要过度优化边缘情况。因此,为了澄清这一点,您需要在使用php
解析之前验证ini
文件是否包含合法数据,对吗?不,这不是我真正想要的。我想在php上设置一个标志,或者在php.ini的顶部使用某种“use strict”。