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


Posted in PHP onJuly 28, 2014

通常来说在php读取大文件的时候,我们采用的方法一般是一行行来讲取,而不是一次性把文件全部写入内存中,这样会导致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 > 0);
  $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 相关文章推荐
在 PHP 中使用随机数的三个步骤
Oct 09 PHP
PHP简单系统数据添加以及数据删除模块源文件下载
Jun 07 PHP
PHP中include()与require()的区别说明
Mar 10 PHP
用PHP实现弹出消息提示框的两种方法
Dec 17 PHP
php下获取http状态的实现代码
May 09 PHP
PHP文件缓存内容保存格式实例分析
Aug 20 PHP
推荐几款用 Sublime Text 开发 Laravel 所用到的插件
Oct 30 PHP
php自定义urlencode,urldecode函数实例
Mar 24 PHP
PHP常见漏洞攻击分析
Feb 21 PHP
thinkphp项目部署到Linux服务器上报错“模板不存在”如何解决
Apr 27 PHP
Thinkphp通过一个入口文件如何区分移动端和PC端
Apr 18 PHP
PHP通过文件路径获取文件名的实例代码
Oct 14 PHP
将CMYK颜色值和RGB颜色相互转换的PHP代码
Jul 28 #PHP
php Imagick获取图片RGB颜色值
Jul 28 #PHP
PHP exif扩展方法开启详解
Jul 28 #PHP
取得单条网站评论以数组形式进行输出
Jul 28 #PHP
PHP中unset,array_splice删除数组中元素的区别
Jul 28 #PHP
PHP常用数组函数介绍
Jul 28 #PHP
PHP调用C#开发的dll类库方法
Jul 28 #PHP
You might like
php表单转换textarea换行符的方法
2010/09/10 PHP
基于PHP中的常用函数回顾
2013/07/11 PHP
yii2.0数据库迁移教程【多个数据库同时同步数据】
2016/10/08 PHP
Jquery中getJSON在asp.net中的使用说明
2011/03/10 Javascript
js列举css中所有图标的实现代码
2011/07/04 Javascript
jquery如何把数组变为字符串传到服务端并处理
2014/04/30 Javascript
JavaScript中的公有、私有、特权和静态成员用法分析
2014/11/20 Javascript
HTML,CSS,JavaScript速查表推荐
2014/12/02 Javascript
浅谈Cookie的生命周期问题
2016/08/02 Javascript
详解Node.js如何开发命令行工具
2016/08/14 Javascript
iscroll.js滚动加载实例详解
2017/07/18 Javascript
vue中计算属性(computed)、methods和watched之间的区别
2017/07/27 Javascript
微信小程序使用request网络请求操作实例
2017/12/15 Javascript
Vue 实现简易多行滚动&quot;弹幕&quot;效果
2020/01/02 Javascript
Node.JS获取GET,POST数据之queryString模块使用方法详解
2020/02/06 Javascript
在Python的Flask框架下使用sqlalchemy库的简单教程
2015/04/09 Python
Python实现在matplotlib中两个坐标轴之间画一条直线光标的方法
2015/05/20 Python
python实现unicode转中文及转换默认编码的方法
2017/04/29 Python
pyqt弹出新对话框,以及关闭对话框获取数据的实例
2019/06/18 Python
Pandas0.25来了千万别错过这10大好用的新功能
2019/08/07 Python
python GUI库图形界面开发之PyQt5打开保存对话框QFileDialog详细使用方法与实例
2020/02/27 Python
python实现横向拼接图片
2020/03/23 Python
python实现坦克大战
2020/04/24 Python
爱游人:Travelliker
2017/09/05 全球购物
Veronica Beard官网:在酷、经典和别致之间找到了平衡
2018/01/11 全球购物
四年的个人工作自我评价
2013/12/10 职场文书
计算机学生求职信范文
2014/01/30 职场文书
经典促销广告词大全
2014/03/19 职场文书
网页美工求职信范文
2014/04/17 职场文书
社区党的群众路线教育实践活动总结材料
2014/10/31 职场文书
不尊敬老师的检讨书
2014/12/21 职场文书
2016年少先队活动总结
2016/04/06 职场文书
Go各时间字符串使用解析
2021/04/02 Golang
Python基础之进程详解
2021/05/21 Python
从QQtabBar看css命名规范BEM的详细介绍
2021/08/07 HTML / CSS
我去timi了,一起去timi是什么意思?
2022/04/13 杂记