入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

php读取超大文件最后几行

创建时间:2016-08-03 投稿人: 浏览次数:1677

大文件只能用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。