PHP隨機讀取大檔案中的若干行

2021-07-02 01:13:08 字數 1166 閱讀 1476

我們在日常的工作中,經常會遇到用php操作大檔案,比如需要分析系統日誌等問題,有的日誌檔案可能很大,幾個g以上,如果用file和file_get_contents函式的話,就會產生問題,由於這兩個函式是一次性將檔案內容載入到記憶體中,而有時候php本身或機器記憶體的限制,往往就會產生記憶體的溢位。下面就介紹一下如何正確的讀取大檔案,我們可以用fopen,fgets函式通過指標進行操作,看如下**:

function getfilelines($filename, $startline = 1, $limitline = 50, $method = 『rb』)

// 讀取檔案指定行內容

$limitline += $i;

for($i;$i<=$limitline;++$i)

}fclose($fp);

return $content;

}除了這種方法之外,還有效率更好一點的方法,那就是使用splfileobject。

從 php 5.1.0 開始,spl 庫增加了 splfileobject 與 splfileinfo 兩個標準的檔案操作類。splfileinfo 是從 php 5.1.2 開始實現的。

splfileinfo 僅用於獲取檔案的一些屬性資訊,如檔案大小、檔案訪問時間、檔案修改時間、字尾名等值。

splfileobject檔案操作類繼承了splfileinfo的所有功能,它將php檔案中的i/o函式綜合在一起如fopen()、fread()等函式,形成了乙個多功能的物件導向的介面。可以使用這個類以物件導向的方法來讀取和操作檔案資料,同時還能獲取檔案的大小及其它詳細資訊。

splfileobject也是乙個迭代器,並且還是可查詢的,這允許通過foreach迴圈來使用檔案的內容。如:

$it = new splfileobject('pm.csv');

foreach($it as $line)

?>

那麼我們就來看看用splfileobject如何進行大檔案的讀取操作,**如下:

function getfilelines($filename, $startline = 1, $limitline = 50, $method = 『rb』)

return $content;

}經過多次測試,證明splfileobject比上面的fgets效率要好一些,特別是檔案行數比較多,讀取的起始行數不在檔案的前部時,效果更加明顯。

php 讀取大檔案

在php中,對於檔案的讀取時,最快捷的方式莫過於使用一些諸如file file get contents之類的函式,簡簡單單的幾行 就能 很漂亮的完成我們所需要的功能。但當所操作的檔案是乙個比較大的檔案時,這些函式可能就顯的力不從心,下面將從乙個需求入手來說明對於讀取大檔案時,常用的操作方法。需求需...

php讀取大檔案

本文章來給各位同學介紹php中讀取大檔案實現方法詳解吧,有需要了解的同學可進入參考參考。需求如下 現有乙個1g左右的日誌檔案,大約有500多萬行,用php返回最後幾行的內容。實現方法 直接採用file函式來操作 注 由於 file函式是一次性將所有內容讀入記憶體,而php為了防止一些寫的比較糟糕的程...

shell 隨機從檔案中抽取若干行

shuf n5 main.txt sort r main.txt head 5 awk vn 5 vc wc l file begin shuf 命令的選項 e,echo 將每個引數視為輸入行 i,input range lo hi 將lo 到hi 的每個數字視為輸入行 n,head count 行...