通常来说在php读取大文件的时候,我们采用的方法一般是一行行来读取,而不是一次性把文件全部写入内存中,这样会导致php程序卡死,下面就给大家介绍这样一个例子。
需求:有一个800M的日志文件,大约有500多万行, 用PHP返回最后几行的内容。
实现方法:
<?php
/**
* 取文件最后$n行
* @param string $filename
* @param int $n 最后几行
* @return mixed false
*/
function ReadLastLines($filename, $n){
if(!$fp = fopen($filename, 'r')){
echo "打开文件失败,请检查文件路径是否正确,路径和文件名不要包含中文";
return false;
}
$pos = -2;
$eof = "";
$str = "";
while($n > 0){
while($eof != "\n"){
if(!fseek($fp, $pos, SEEK_END)){
$eof = fgetc($fp);
$pos--;
}else{
break;
}
}
$str = fgets($fp).$str;
$eof = "";
$n--;
}
return $str;
}
echo nl2br(ReadLastLines('log.txt', 4));
?>