无法使用 parse_ini_file 读取文件

Cannot read a file using parse_ini_file

我无法使用 parse_ini_file 从 ini 文件加载数据。它能够使用 file_get_contents 读取文件,但使用 parse_ini_file 时失败。 ini 文件是:

[names]
me = Robert
you = Peter

[urls]
first = "http://www.example.com"
second = "https://www.w3schools.com"

密码是:

echo file_exists($iniFile), "<br>";
echo file_get_contents($iniFile), "<br>";
echo "print_r parse result---->";
print_r(parse_ini_file($iniFile));
$data = parse_ini_file($iniFile);
echo "<br>this is data-me---->", $data['me'], "<br>";
echo "this is data---->", $data, "<br>";
if(empty($data)){
    HHelper::logItA($folder . "/Errors", $folder . "_ini", $key . " file empty");
    die("\nNo data in {$key}, iniFile {$iniFile}\n");
}

输出为:

1
[names] me = Robert you = Peter [urls] first = "http://www.example.com" second = "https://www.w3schools.com"
print_r parse result---->
this is data-me---->
this is data---->
No data in EventImport/test.ini, iniFile s3://configs.hamlethub.com/EventImport/test.ini

我不明白为什么这不会读入数组。任何帮助将不胜感激。

请忽略我上面的评论,您的 ini 文件在语法上没有问题,并且在我的机器上解析没有问题。

如果文件位于 S3 上,正如错误输出中 $iniFile 变量的值所暗示的那样,那么函数 parse_ini_file 可能不是您需要的。对该函数文档的评论指出该函数似乎不适用于远程文件:http://php.net/manual/en/function.parse-ini-file.php#37293.

也就是说,仍然有可能实现您的目标,这是我尝试的方法:

由于您可以使用 file_get_contents 从 S3 检索文件的内容,因此您可以解析 returned 的文本。您可以使用函数 parse_ini_string 进行与 parse_ini_file 相同的解析,并使用 return 预期的关联数组。

$ini = file_get_contents($iniFile);
$data = parse_ini_string($ini);
print_r($data);

这应该可以解决问题。

这是 parse_ini_string 的文档:http://php.net/manual/en/function.parse-ini-string.php

至少值得注意的是,拥有远程 ini 文件的想法让我觉得存在安全风险,具体取决于 ini 文件的内容的用途,因此请确保将此文件的权限锁定在AWS 的生态系统紧紧地向下。 parse_ini_file 功能可能不联系远程机器的原因可能只是出于安全原因(尽管由于需求低,他们可能刚刚决定永远不实现该功能)。