【问题标题】:parse_ini_file() does not confirm with manualparse_ini_file() 没有与手册确认
【发布时间】:2018-09-11 12:03:16
【问题描述】:

关于 PHP 的 parse_ini_file() 中的一些怪癖,我有两个问题。

有些保留字不能用作 ini 的键 文件。其中包括:null、yes、no、true、false、on、off、none。 值 null、off、no 和 false 导致 "",值 on、yes 和 true 结果为“1”,除非使用 INI_SCANNER_TYPED 模式(从 PHP 5.6.1)。

根据上述,如果你设置INI_SCANNER_TYPED,你可以使用no作为key。那么为什么会失败呢?

$ echo "no=1" > a.cfg | php -r 'print_r(parse_ini_file("a.cfg", TRUE, INI_SCANNER_TYPED));'
PHP Warning:  syntax error, unexpected BOOL_FALSE in tmp.cfg on line 1
$ php --version
PHP 7.1.14 (cli) (built: Feb  2 2018 08:41:46) ( NTS )

另外,下面列出的字符的“特殊含义”是什么?手册不详。

字符 ?{}|&~!()^" 不得用于键中,且在值中具有特殊含义。

【问题讨论】:

    标签: php ini


    【解决方案1】:

    您误解了您引用的文字。它说:

    nulloffnofalse 导致 "" onyes 和 @ 987654329@ 导致 "1",除非使用 INI_SCANNER_TYPED 模式(自 PHP 5.6.1 起)。

    它说的是价值观。在默认模式下,这些被转换为字符串"""1"。在INI_SCANNER_TYPED 模式下,这些 被转换为布尔值falsetrue

    它没有说任何关于钥匙的事情。这些词仍然不能用作键。

    检查它是如何工作的:https://3v4l.org/5uZFN

    【讨论】:

    • 诚实的错误。文本真的可以更精确。但更紧迫的问题是,为什么键中不允许使用布尔词?布尔词显然是为了价值使用。
    猜你喜欢
    • 1970-01-01
    • 2020-10-31
    • 2020-12-20
    • 2020-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-10
    相关资源
    最近更新 更多