2017-05-29 86 views
0

我正在開發一個PHP日誌文件查看器,該文件讀取器應該讀取文件中的10行(例如2 GB),並且當用戶單擊下一行時,必須讀取隨後的10行。當按下後退按鈕時,最後10行必須被打印。在php中讀取大文件並逐行導航

到目前爲止,我已經使用fgets(由於文件的大小)實現了文件讀取,並且試圖找出如何尋找下10行和前10行。

if($handle) 
{ 
    $cnt=1; 
    while(($buffer=fgets($handle))!==false and $cnt<=10) { 
     echo $buffer; 
     $cnt++; 
    } 
    if(feof($handle)) { 
     echo "error"; 
    } 

} 
+0

我將與外殼執行'EXEC做到這一點()'和使用'tail'函數來解析的最後10行。 –

+0

你在前端使用什麼?網頁瀏覽器? – Juned

+0

yes.web browser- jquery在php後端啓動動作 – Jeyaganesh

回答

0

在PHP中的SplFileObject類做你想做的事情。參見: http://php.net/manual/en/splfileobject.seek.php

示例代碼:

<?php 
// Set $lineNumber to the line that you want to start at 
// Remember that the first line in the file is line 0 
$lineNumber = 43; 
// This sets how many lines you want to grab 
$lineCount = 10; 

// Open the file 
$file = new SplFileObject("logfile.log"); 

// This seeks to the line that you want to start at 
$file->seek($lineNumber); 

for($currentLine=0; $currentLine < $lineCount; $currentLine++) { 
    echo $file->current(); 
    $file->next(); 
} 
?> 
+0

對大文件> 2gb做這項工作嗎?另外,當用戶點擊下一個按鈕..我需要再次創建$文件對象? – Jeyaganesh

+0

應該在大文件上正常工作。既然你是從網上調用這個,你可能每次都必須打開$ file,除非你想建立某種服務器進程來保持日誌文件始終打開,並提供10行客戶端應用程序正在請求(可能通過AJAX調用)。也就是說,你可能只是簡單的實現你的目的(即使用SplFileObject打開文件,抓住你需要的10行,然後回顯給用戶)。 –

+0

順便說一句,我採取的另一種方法(當我正在處理服務器設備項目時)是建立一個將日誌文件提交到數據庫(在這種情況下爲MySQL)的後端進程,然後我們可以快速查詢以獲取日期範圍,特定類型的消息,特定數量和日誌行範圍等。 –