PHP讀取超大檔案的最後幾行

2021-07-11 10:39:41 字數 614 閱讀 1622

當乙個檔案,特別是linux系統日誌大於2個g時,1000多萬條資料,如果用file開啟返回所有行的陣列,系統會直接卡死或者記憶體爆滿。

這時,我們可以用檔案指標fseek來定位、fgetc來獲取換行符和fgets來獲取整行,配合就可以完美的快速獲取最後n行

/*

獲取大檔案最後n行方法

原理:首先通過fseek找到檔案的最後一位eof,然後找最後一行的起始位置,取這一行的資料,再找次一行的起始位置, 再取這一行的位置,依次類推,直到找到了$num行。

*/$file="f:\access_log";

//$file="log.txt";

var_dump(tail($file,10));

function tail($file,$num)else

}array_unshift($lines,fgets($fp));

if($head) //這一句,只能放上一句後,因為到檔案頭後,把第一行讀取出來再跳出整個迴圈

$eof = "";

$num--;

}fclose($fp);

return $lines;

}?>

輸出檔案的最後幾行,可以對付超大檔案

當乙個檔案,特別是系統日誌檔案大於2個g時,1000多萬條資料,如果用file開啟返回所有行的陣列,系統會直接卡死或者記憶體爆滿。這時,我們可以用檔案指標fseek來定位 fgetc來獲取換行符和fgets來獲取整行,配合就可以完美的快速獲取最後n行 style font family micros...

php 讀取超大檔案

php開發很多時候都要讀取大檔案,比如csv檔案 text檔案等。這些檔案如果很大,比如10個g。這時,直接一次性把所有的內容讀取到記憶體中計算不太現實。遇到這種情況,往往覺得php太弱,實則不然。利用生成器 關鍵字yield 就能解決。好了,上 created by phpstorm.user a...

linux 刪除檔案最後幾行

root server a sed n a.txt root server sed a 3 1 d a.txt 或者使用上面兩條命令。刪除的是倒數3行的。如果刪除倒數300 那就把3改為300 就可以了。root server cat aa.txt aaaa bbbb cccc dddd eeee ...