Php 无法使用parse\u ini\u文件读取文件

Php 无法使用parse\u ini\u文件读取文件,php,ini,Php,Ini,我无法使用parse_ini_文件从ini文件加载数据。它可以使用file\u get\u内容读取文件,但在使用parse\u ini\u文件时失败。ini文件是: [names] me = Robert you = Peter [urls] first = "http://www.example.com" second = "https://www.w3schools.com" 代码是: echo file_exists($iniFile), "<br>"; echo file

我无法使用parse_ini_文件从ini文件加载数据。它可以使用file\u get\u内容读取文件,但在使用parse\u ini\u文件时失败。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");
}

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

请忽略我的上述评论,您的ini文件在语法上是良好的,在我的机器上解析没有问题

如果文件位于S3上,如错误输出中
$ini文件
变量的值所示,则函数
parse_ini_文件
可能不是您所需要的。函数文档上的注释说明该函数似乎不适用于远程文件:

也就是说,实现你的目标仍然是可能的,以下是我将尝试的:

由于可以使用S3的
file\u get\u contents
检索文件内容,因此可以解析返回的文本。您可以使用函数
parse_ini_string
执行与
parse_ini_file
相同的解析,并返回预期的关联数组

$ini = file_get_contents($iniFile);
$data = parse_ini_string($ini);
print_r($data);
这应该能奏效

以下是有关解析ini字符串的文档:


至少值得注意的是,拥有远程ini文件的想法给我的印象是一种安全风险,这取决于ini文件的内容的用途,因此请确保在AWS的生态系统中严格锁定此文件的权限。
parse_ini_file
函数可能不与远程机器联系的原因可能只是出于安全原因(尽管他们可能因为需求低而决定从不实现该功能)。

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

如果文件位于S3上,如错误输出中
$ini文件
变量的值所示,则函数
parse_ini_文件
可能不是您所需要的。函数文档上的注释说明该函数似乎不适用于远程文件:

也就是说,实现你的目标仍然是可能的,以下是我将尝试的:

由于可以使用S3的
file\u get\u contents
检索文件内容,因此可以解析返回的文本。您可以使用函数
parse_ini_string
执行与
parse_ini_file
相同的解析,并返回预期的关联数组

$ini = file_get_contents($iniFile);
$data = parse_ini_string($ini);
print_r($data);
这应该能奏效

以下是有关解析ini字符串的文档:


至少值得注意的是,拥有远程ini文件的想法给我的印象是一种安全风险,这取决于ini文件的内容的用途,因此请确保在AWS的生态系统中严格锁定此文件的权限。
parse\u ini\u file
功能可能不与远程机器联系的原因可能只是出于安全原因(尽管他们可能因为需求低而决定从不实现该功能)。

似乎很奇怪,它会无声地失败。我假设它返回一个布尔值false,因为print\u r是空的。如果是这样的话,它肯定是失败的,尽管不是有益的。文档说明,从5.2.7开始,由于语法错误,返回false。也许可以将文件简化为一个简单的定义,看看它是否会返回任何东西?看起来很奇怪,它会默默地失败。我假设它返回一个布尔值false,因为print\u r是空的。如果是这样的话,它肯定是失败的,尽管不是有益的。文档说明,从5.2.7开始,由于语法错误,返回false。也许可以将文件简化为一个简单的定义,看看它是否会返回任何东西?工作起来很有魅力!多亏了你,你帮我省去了很多麻烦。我从来没有想到过。我将S3文件作为流打开,不知道会有什么不同。谢谢你的安全提示。由于S3只对这个服务器开放,所以它被完全锁定了。工作起来很有魅力!多亏了你,你帮我省去了很多麻烦。我从来没有想到过。我将S3文件作为流打开,不知道会有什么不同。谢谢你的安全提示。由于S3只对该服务器开放,因此它被完全锁定。