2010-01-21 114 views
0

我有以下記事本文件;PHP中的爆發函數

dbName:    

tableName:  

numberOfFields: 

我試圖寫一個PHP應用程序,它DBNAME到$ DBNAME,表名至$表名的價值和numberOfFields賦給$ numFields。

我的代碼是:

$handle = @fopen("config.txt", "r"); 
if ($handle) { 
    while (!feof($handle)) { 
     $buffer = fgets($handle, 4096); 
     list($dbName, $tableName, $numFields) = explode(":", "$buffer"); 
    } 
    fclose($handle); 
} 

然而,「:」因爲有行數據庫名和表名之間打破了不起作用。如何分解$ buffer,在記事本文件中保留換行符?

謝謝。

+0

我會建議幾件事情 - 不使用'@'來壓制警告或錯誤,並且使用file_get_contents或file()而不是fopen。 – JAL 2010-01-21 01:24:59

+0

注意,謝謝=) – user254688 2010-01-21 03:00:07

回答

4

看一看的file功能。它負責打開和讀取文件,並從文件返回一行數組。然後您可以遍歷數組並在每一行上單獨運行。

http://us.php.net/manual/en/function.file.php

+0

偉大的工程!我如何選擇,可以說,第3行?謝謝 – user254688 2010-01-21 01:33:03

+0

$ lines = file('/ path/to/file.txt'); $ line3 = $ lines [2]; – echo 2010-01-21 02:00:54

+0

可能會提到在那個結尾會有\ n或\ r或\ r \ n(換行符)。所以如果它像用戶/密碼(不是標記)那樣重要,你會想'做'rtrim($ lines [2])。 – 2010-01-21 02:52:22

0

fgets只返回一行。 $buffer沒有辦法同時擁有所有三項,因此分配到list()是錯誤的。對於第一行,explode()將返回包含兩項的數組:"dbName"(冒號前的文本)和""(冒號後的文本)。

0

這是否工作:

list ($dbName, $tableName, $numFields) = explode (':', implode ('', file ('config.txt'))); 
+0

不,它返回 「dbName tableName numberOfFields」當我echo $ dbName – user254688 2010-01-21 02:42:03

1

你可以這樣做:如果你確定的行內容

$data=file_get_contents("file"); 
$s = preg_split("/\n\n+/m", $data); 
print_r($s); 
0

,該文件將不會增長任意大:

1 <?php 
    2 
    3 $handle = @fopen("config.txt", "r"); 
    4 if ($handle) { 
    5  $buffer = ""; 
    6  while (!feof($handle)) { 
    7   $buffer = $buffer . trim(fgets($handle, 4096)); 
    8  } 
    9  fclose($handle); 
10 
11  list($dbName, $tableName, $numFields) = explode(":", $buffer); 
12 } 
13 
14 ?> 

while循環將遍歷所有行並在刪除空白後連接到同一個緩衝區。這隻留下由「:」分隔的內容。這現在可以爆炸了。

正如Nicolas寫道的,feof一次只能獲取一行,因此列表分配需要在循環之外進行。