2013-05-28 136 views
2

讓我們承認我們有一個巨大的文本文件,更準確的ics文件。巨大的... 10MB以上
我們希望能夠讀出只有從php fopen - 如何使用fopen打開文件的一部分,

 
'BEGIN:VEVENT 
CREATED:20111130T144848Z' 
... 

用PHP
一塊它的

 
... 
'END:VEVENT'. 

下一個出現爲了使用它作爲一個數組
有人有提示嗎?

+0

使用FSEEK導航:http://www.php.net/manual/en/function.fseek.php和FREAD讀取數據:HTTP:// WWW .php.net/manual/en/function.fread.php – user4035

+0

'fopen()'只是打開文件,它不會讀取任何文件。當你到達終點線時,停止調用fgets()。 – Barmar

+0

我建議每X分鐘緩存一次你需要的部分,這樣減少了負載。特別是當你不知道這個部分的位置時,最壞的情況會導致搜索10MB的數據,而且根本找不到它。 所以,如果你必須這樣做,每一個請求將需要很多時間。 – B8vrede

回答

0

嘗試這樣的事:

$numb=0; 
$result=array(); 
$handle = @fopen("inputfile.txt", "r"); 
$exit=0; 
    while (($buffer = fgets($handle) && $exit==0) { 
     if(strpos($buffer,'BEGIN:VEVENT')){ 
      $onoff=1; 
     } 
     if ($onoff==1){ 
      $result[$numb]=$buffer; 
      $numb=numb+1; 
     } 
     if(strpos($buffer,'END:VEVENT')){ 
      $onoff=0; 
      $exit=1; 
     } 

    } 
    if (!feof($handle)) { 
     echo "Error: unexpected fgets() fail\n"; 
    } 
    fclose($handle); 
} 
+0

如果您必須在同一個文件中處理多個事件,您可以添加一個新的參數,如果您想設置'exit'參數: ) – Anze