我无法使用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
我无法弄清楚为什么这不会读入数组。任何帮助将不胜感激。
答案 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
函数可能不联系远程计算机的原因可能仅仅是出于安全原因(尽管他们可能因为需求较低而决定永远不会实现该功能)。