2014-01-14 89 views
0

即時閱讀上的PHP文件中使用此代碼返回所有文字PHP

$file_array = parse_ini_file("/usr/local/etc/oscam.user"); 
    echo "<pre>"; 
    foreach ($file_array as $value) { 
     echo $value."<br />"; 
    } 
    exit; 

將輸出

sovrum 
pass2 
1 
0 
0B00 
0B00:000000 

那是正確的,但問題是,它只是給我回文件的末尾(在最後一個元素)我的文件看起來像這樣

[account] 
user       = vrum 
pwd       = pass1 
group       = 1 
au       = 1 
caid       = 0B00 
ident       = 0B00:000000 

[account] 
user       = sovrum 
pwd       = pass2 
group       = 1 
au       = 0 
caid       = 0B00 
ident       = 0B00:000000 

正如你可以看到那裏有多個帳戶,即可閱讀。

回答

1

正如你不能改變原有的文件,很可能你就必須手動解析它,像這樣的東西:

$handle = @fopen("oscam.user", "r"); 
if ($handle) { 
    while (($line = fgets($handle)) !== false) { 
     if(strlen(trim($line)) > 0 && $line[0] != "[") { 
      $ar = explode("=", $line); 
      echo(trim($ar[1])); 
     } 
    } 
} 

原來的答案:

parse_ini_file將覆蓋值,如他們有相同的名字。你可能想有一個像你的文本文件:

[account] 
user[]       = vrum 
pwd[]       = pass1 
group[]       = 1 
au[]       = 1 
caid[]       = 0B00 
ident[]       = 0B00:000000 

[account] 
user[]       = sovrum 
pwd[]       = pass2 
group[]       = 1 
au[]       = 0 
caid[]       = 0B00 
ident[]       = 0B00:000000 

,並且爲了讓所有的值:

$file_array = parse_ini_file("/usr/local/etc/oscam.user"); 
echo "<pre>"; 
foreach ($file_array as $val_array) { 
    foreach($val_array as $value) { 
     echo $value."<br />"; 
    } 
} 
exit; 
+0

我不能改變原始文件 –

+0

@AlvaroCarvajalNakosmai請檢查編輯的答案。 –

1

我假設pass1pass2是替代實際密碼,在這種情況下,那裏的角色可能會拋棄解析。嘗試使用INI_SCANNER_RAW作爲$ scanner_mode。這將保持php試圖解析值。

編輯:使用你的價值觀和等效parse_ini_string()函數,這似乎很好地工作: https://eval.in/89029

1
$content = file_get_contents("/usr/local/etc/oscam.user"); 
preg_match_all('/\]([^\[]+)/s', $content, $matches); 

echo "<pre>"; 
foreach ($matches[1] as $block) { 
    $array = parse_ini_string($block); 
    foreach ($array as $value) { 
     echo $value."<br />"; 
    } 
} 
echo "</pre>"; 
exit; 

解析文件塊,從符號分離「]」到「[」,然後解析每個塊的ini_string,然後打印它們的值。

+0

請檢查更新 –