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 相关文章推荐
攻克CakePHP系列二 表单数据显示
Oct 22 PHP
解决FastCGI 进程超过了配置的活动超时时限的问题
Jul 03 PHP
配置php网页显示各种语法错误
Sep 23 PHP
windows下配置apache+php+mysql时出现问题的处理方法
Jun 20 PHP
PHP登录环节防止sql注入的方法浅析
Jun 30 PHP
让ThinkPHP支持大小写url地址访问的方法
Oct 31 PHP
thinkphp实现163、QQ邮箱收发邮件的方法
Dec 18 PHP
PHP函数shuffle()取数组若干个随机元素的方法分析
Apr 02 PHP
分享一个漂亮的php验证码类
Sep 29 PHP
Yii框架弹出框功能示例
Jan 07 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
Sep 22 PHP
PHP getID3类的使用方法学习笔记【附getID3源码下载】
Oct 18 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中文乱码
2009/11/26 PHP
$_GET['goods_id']+0 的使用详解
2013/06/06 PHP
PHP获取windows登录用户名的方法
2014/06/24 PHP
php调整服务器时间的方法
2015/04/03 PHP
php将金额数字转化为中文大写
2015/07/09 PHP
如何使用纯PHP实现定时器任务(Timer)
2015/07/31 PHP
分享一个漂亮的php验证码类
2016/09/29 PHP
PHP5.6新增加的可变函数参数用法分析
2017/08/25 PHP
laravel框架邮箱认证实现方法详解
2019/11/22 PHP
在js(jquery)中获得文本框焦点和失去焦点的方法
2012/12/04 Javascript
当前页禁止复制粘贴截屏代码小集
2013/07/24 Javascript
为什么Node.js会这么火呢?Node.js流行的原因
2014/12/01 Javascript
Jquery遍历Json数据的方法
2015/04/20 Javascript
jQuery实现按钮的点击 全选/反选 单选框/复选框 文本框 表单验证
2015/06/25 Javascript
JavaScript 常见安全漏洞和自动化检测技术
2015/08/21 Javascript
基于jquery实现省市区三级联动效果
2015/12/25 Javascript
详解Angular的双向数据绑定(MV-VM)
2016/12/26 Javascript
利用ES6语法重构React组件详解
2017/03/02 Javascript
浅谈React 服务器端渲染的使用
2018/05/08 Javascript
AngularJS 事件发布机制
2018/08/28 Javascript
Vue 实现把表单form数据 转化成json格式的数据
2019/10/29 Javascript
vue中使用vue-pdf的方法详解
2020/09/05 Javascript
[08:56]DOTA2-DPC中国联赛2月23日Recap集锦
2021/03/11 DOTA
Python中的进程分支fork和exec详解
2015/04/11 Python
编写Python爬虫抓取暴走漫画上gif图片的实例分享
2016/04/20 Python
Python中数组,列表:冒号的灵活用法介绍(np数组,列表倒序)
2018/04/18 Python
django2用iframe标签完成网页内嵌播放b站视频功能
2018/06/20 Python
python通过实例讲解反射机制
2019/10/17 Python
使用matplotlib绘制图例标签中带有公式的图
2019/12/13 Python
Urban Outfitters美国官网:美国生活方式品牌
2016/08/26 全球购物
TripAdvisor西班牙官方网站:全球领先的旅游网站
2018/01/10 全球购物
高中军训感言500字
2014/02/24 职场文书
技术入股合作协议书
2014/10/07 职场文书
毕业感言怎么写
2015/07/31 职场文书
干部作风纪律整顿心得体会
2016/01/23 职场文书
会议承办单位欢迎词
2019/07/09 职场文书