php讀取超大檔案最後幾行
阿新 • • 發佈:2019-02-18
大檔案只能用fread()一行行讀,直接file()會記憶體不足,php.ini memory_limit預設是128m記憶體
<?php /** * 取檔案最後$n行 * @param string $file 檔案路徑 * @param int $line 最後幾行 * @return mixed 成功則返回字串 */ function getLastLines($file,$line=1){ if(!$fp=fopen($file,'r')){ echo "開啟檔案失敗"; return false; } $pos = -2; //偏移量 $eof = " "; //行尾標識 $data = ""; while ($line > 0){//逐行遍歷 while ($eof != "\n"){ //不是行尾 fseek($fp, $pos, SEEK_END);//fseek成功返回0,失敗返回-1 $eof = fgetc($fp);//讀取一個字元並賦給行尾標識 $pos--;//向前偏移 } $eof = " "; $data .= fgets($fp);//讀取一行 $line--; } fclose($fp); return $data; } //測試 print_r(getLastLines("access.log",5));exit;
如果是linux伺服器,還可以使用tail來進行
<?php
function getLastLines($file,$line=1){
$file = escapeshellarg($file); // 對命令列引數進行安全轉義
$line = `tail -n $line $file`;
return $line;
}
//測試
print_r(getLastLines("down.php",5));exit;