首页 > 编程 > PHP > 正文

php实现读取超大文件的方法

2020-03-22 18:10:27
字体:
来源:转载
供稿:网友
通常来说在php读取大文件的时候,我们采用的方法一般是一行行来讲取,而不是一次性把文件全部写入内存中,这样会导致php程序卡死,下面就给大家介绍这样一个例子。读取大文件最后几行数据:
* 取文件最后$n行 * @param string $filename 文件路径 * @param int $n 最后几行 * @return mixed false表示有错误,成功则返回字符串function FileLastLines($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); $eof = ""; $n–; return $str;echo nl2br(FileLastLines('sss.txt', 4)); * * * 取文件最后$n行 * * @param string $filename 文件路径 * * @param int $n 最后几行 * * @return mixed false表示有错误,成功则返回字符串function FileLastLines($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); $eof = ""; $n--; return $str;echo nl2br(FileLastLines('sss . txt', 4));function tail($fp, $n, $base = 5) assert($n $pos = $n + 1; $lines = array(); while(count($lines) = $n){ try{ fseek($fp, - $pos, SEEK_END); catch (Exception $e){ fseek(0); break; $pos *= $base; while(!feof($fp)){ array_unshift($lines, fgets($fp)); return array_slice($lines, 0, $n);var_dump(tail(fopen("access.log", "r+"), 10));$fp = fopen($file, "r");$line = 10;$pos = -2;$t = " ";$data = "";while ($line 0){ while ($t != "n"){ fseek($fp, $pos, SEEK_END); $t = fgetc($fp); $pos --; $t = " "; $data .= fgets($fp); $line --;fclose ($fp);echo $data;PHP教程

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表