Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何让php严格解析php.ini?_Php - Fatal编程技术网

如何让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选项的模块才真正解释或抱怨它们。

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选项的模块才真正解释或抱怨它们。(他们很少这样做。)
在内存限制的情况下,它预定义为

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”。