【问题标题】:Why the $ character is a problem for the parse_ini_file function in PHP为什么 $ 字符是 PHP 中 parse_ini_file 函数的问题
【发布时间】:2021-10-15 21:45:29
【问题描述】:

我来找你是因为要将ini文件转换为数组,我使用PHP提供的parse_ini_file函数。

从我要检索的ini文件中提取

SocEnCoursBD=001
SocEnCoursBS=001
SocEnCours$$=001
SocEnCoursLOG=001
SocEnCoursLOV=010

不幸的是,parse_ini_file 函数在SocEnCours$$=001 行上生成。

抛出错误

syntax error, unexpected '$'

它似乎不支持$ 字符。我知道 PHP 不支持这个字符,所以我在调用 parse_ini_file 函数时使用选项 INI_SCANNER_RAW

Enfin voici le bout de code PHP qui traite le fichier ini :

    public static function parse(string $path) : array {
        return file_exists($path) ? parse_ini_file($path, true, INI_SCANNER_RAW) : null;
    }

添加我使用 PHP 7.4。如果有人有解决方案,我会很感兴趣^^

【问题讨论】:

  • @axiac 不,我尝试了我提出的解决方案,但错误仍然存​​在
  • 我不确定美元符号在 INI 文件中是否有效,无论是什么语言。不过,我无法找到明确的答案。
  • 使用file_get_contents,通过str_replace('$$=', '__=', 然后使用parse_ini_string,然后像$parsed['SocEnCours__']一样访问或者修复源.ini文件
  • 问题的答案是“没关系,这是规则”。
  • @LawrenceCherone 这可能是一个可行的解决方案,我会尝试

标签: php ini php-7.4


【解决方案1】:

notes of parse_ini_file中指定,

字符 ?{}|&~!()^" 不得在键中的任何位置使用

原始模式不会解除此限制。虽然 $ 不包含在该列表中,但我非常肯定这只是文档中缺少的内容,这也适用于 $

【讨论】:

  • $ 似乎用于value interpolation
  • 是的,但这仅指定其在值中的用法。 OP 在密钥中使用它,该密钥未在文档中定义。但由于值插值中使用的所有其他字符在键中被提及为非法,我相信$ 应该包含在列表中。
【解决方案2】:

我想我找到了解决办法。我使用库 PHP component-ini。我使用这个函数setUseNativeFunction(false) 来防止这样的错误:

syntax error, unexpected '$'

还有解决我问题的代码sn-p,我附在上面:

    public static function parse(string $path) : array {
        $reader = new IniReader();
        $reader->setUseNativeFunction(false);
        return file_exists($path) ? $reader->readFile($path) : null;
    }`

【讨论】:

    猜你喜欢
    • 2015-05-06
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-10
    相关资源
    最近更新 更多