2017-04-08 21 views
0

parse_ini_fileを使用してiniファイルからデータを読み込むことができません。 file_get_contentsを使用してファイルを読み取ることはできますが、parse_ini_fileを使用すると失敗します。parse_ini_fileを使用してファイルを読み取ることができません。

[names] 
me = Robert 
you = Peter 

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

コードは次のとおりです:iniファイルがある

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

奇妙なことに、それは黙って失敗するだろう。 print_rが空であるため、真偽値を返すと仮定します。そうだとすれば、間違いなく役に立たないが、間違いなく失敗している。ドキュメントには、5.2.7以降、構文エラーの結果としてfalseが返されることが記載されています。たぶんファイルを単一の単純な定義にストリップして、それが何かを返すかどうかを確認してください。 – stratedge

答えて

1

上記の私のコメントを無視して、あなたのiniファイルは構文上問題なく、私のマシン上で問題なく解析します。

エラー出力の変数$iniFileの値が示すように、ファイルがS3上にある場合は、関数parse_ini_fileが必要でない可能性があります。関数のドキュメントのコメントには、リモートファイルに対して機能が動作していないようだ(http://php.net/manual/en/function.parse-ini-file.php#37293)。

あなたはS3のオフfile_get_contentsでファイルの内容を取得することができますので、あなたがテキストを解析することができます、それはあなたが行っているものを達成することは可能だと述べて

は、ここに私が試してみたものですそれが返されます。関数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の機能がおそらくリモートマシンに接続していない理由は、セキュリティ上の理由によるものかもしれませんが(要求が少ないため機能を実装しないことを決定したばかりかもしれません)。

+0

チャームのように働いた!ありがとう、あなたは私に多くの頭痛を救った。私はそれを決して考えなかったでしょう。私はS3ファイルをストリームとして開き、違いがあるかどうかはわかりませんでした。セキュリティに関するヒントもありがとう。 S3がこのサーバに対してのみ開かれているので、かなりロックされています。 – HamletHub

関連する問題