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二分查找、顺序查找算法