2017-04-08 2 views
0

Ich kann die Daten aus einer Ini-Datei nicht mit Parse_ini_file laden. Es kann die Datei mit file_get_contents lesen, schlägt jedoch fehl, wenn parse_ini_file verwendet wird. Die INI-Datei ist:Kann eine Datei nicht lesen mit parse_ini_file

[names] 
me = Robert 
you = Peter 

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

Der Code ist:

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"); 
} 

und der Ausgang ist:

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 

ich nicht herausfinden können, warum dies nicht in das Array gelesen wird. Jede Hilfe wäre willkommen.

+0

Es scheint kurios, dass es stumm scheitern würde. Ich nehme an, dass es einen booleschen Wert zurückgibt, da print_r leer ist. Wenn das der Fall ist, scheitert es definitiv, wenn auch nicht hilfreich. Die Dokumentation besagt, dass seit 5.2.7 false als Ergebnis eines Syntaxfehlers zurückgegeben wird. Vielleicht die Datei auf eine einzige, einfache Definition abzustreifen und sehen, ob das etwas zurückgibt? – stratedge

Antwort

1

Ignorieren Sie meinen Kommentar oben, Ihre Ini-Datei ist syntaktisch gut und analysiert ohne Problem auf meinem Computer.

Wenn die Datei auf S3 liegt, wie durch den Wert der $iniFile Variable in Ihrer Fehlerausgabe angedeutet, dann ist die Funktion parse_ini_file möglicherweise nicht das, was Sie benötigen. Ein Kommentar zur Dokumentation der Funktion bemerkt, dass die Funktion für entfernte Dateien nicht zu funktionieren scheint: http://php.net/manual/en/function.parse-ini-file.php#37293.

Das heißt, es immer noch möglich ist, zu erreichen, was Sie vorhaben, denn hier ist das, was ich versuchen würde:

Da Sie den Inhalt der Datei mit file_get_contents aus der S3 abrufen können, können Sie den Text analysieren das ist zurückgegeben. Sie können die Funktion parse_ini_string verwenden, um dasselbe Parsing durchzuführen, das parse_ini_file durchgeführt hätte, und das erwartete assoziative Array zurückzugeben.

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

Das sollte den Trick tun.

Hier ist die Dokumentation für parse_ini_string: http://php.net/manual/en/function.parse-ini-string.php

Es ist zumindest bemerkenswert, dass die Idee, eine Remote-ini-Datei als Sicherheitsrisiko scheint mich zu haben, je nachdem, was der Inhalt der INI-Datei für verwendet werden, so Stellen Sie sicher, dass Sie die Berechtigungen dieser Datei im AWS-Ökosystem fest verschließen. Der Grund, warum die parse_ini_file-Funktion wahrscheinlich keine Remote-Computer kontaktiert, kann nur aus Sicherheitsgründen sein (obwohl sie sich vielleicht gerade dazu entschlossen haben, die Funktionalität aufgrund der geringen Nachfrage nie zu implementieren).

+0

Arbeitete wie ein Charme! Dank dir hast du mir viele Kopfschmerzen erspart. Daran hätte ich nie gedacht. Ich habe die S3-Datei als Stream geöffnet und wusste nicht, dass es einen Unterschied geben würde. Danke für den Tipp zur Sicherheit. Es ist ziemlich gesperrt, da das S3 nur für diesen Server geöffnet ist. – HamletHub