无法使用parse_ini_file读取文件

时间:2017-04-08 23:51:46

标签: php ini

我无法使用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

我无法弄清楚为什么这不会读入数组。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

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

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

那就是说,你仍然可以实现你的目标,这就是我的尝试:

由于您可以使用file_get_contents关闭S3来检索文件的内容,因此您可以解析返回的文本。您可以使用函数parse_ini_string执行parse_ini_file所做的相同解析,并返回预期的关联数组。

$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函数可能不联系远程计算机的原因可能仅仅是出于安全原因(尽管他们可能因为需求较低而决定永远不会实现该功能)。