php读取超大文件最后几行
大文件只能用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 != "
"){ //不是行尾
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;
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇: thinkphp5.0极速搭建restful风格接口层实例
- 下一篇: php二分查找、顺序查找算法
