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 删除一个目录及目录下的所有文件的函数代码
May 26 PHP
腾讯QQ微博API接口获取微博内容
Oct 30 PHP
Dwz与thinkphp整合下的数据导出到Excel实例
Dec 04 PHP
PHP的Yii框架使用中的一些错误解决方法与建议
Aug 21 PHP
ThinkPHP中session函数详解
Sep 14 PHP
PHP随机获取未被微信屏蔽的域名(微信域名检测)
Mar 19 PHP
Laravel中encrypt和decrypt的实现方法
Sep 24 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
Dec 21 PHP
PHP生成随机数的方法总结
Mar 01 PHP
PHP的PDO错误与错误处理
Jan 27 PHP
Laravel框架实现多数据库连接操作详解
Jul 12 PHP
Yii框架 session 数据库存储操作方法示例
Nov 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
超神学院:鹤熙已踏入神圣领域,实力不比凯莎弱
2020/03/02 国漫
php 无法载入mysql扩展
2010/03/12 PHP
php中多维数组按指定value排序的实现代码
2014/08/19 PHP
Smarty变量调节器失效的解决办法
2014/08/20 PHP
PHP使用DirectoryIterator显示下拉文件列表的方法
2015/03/13 PHP
php倒计时出现-0情况的解决方法
2016/07/28 PHP
laravel实现按月或天或小时统计mysql数据的方法
2019/10/09 PHP
JavaScript的面向对象(一)
2006/11/09 Javascript
js实现的网页颜色代码表全集
2007/07/17 Javascript
javascript mouseover、mouseout停止事件冒泡的解决方案
2009/04/07 Javascript
基于jquery的给文章加入关键字链接
2010/10/26 Javascript
基于jquery的loading效果实现代码
2010/11/05 Javascript
javascript 二进制运算技巧解析
2012/11/27 Javascript
JavaScript学习心得之概述
2015/01/20 Javascript
Jquery对select的增、删、改、查操作
2015/02/06 Javascript
对称加密与非对称加密优缺点详解
2017/02/06 Javascript
vue.js vue-router如何实现无效路由(404)的友好提示
2017/12/20 Javascript
JS中touchstart事件与click事件冲突的解决方法
2018/03/12 Javascript
vuejs前后端数据交互之从后端请求数据的实例
2018/08/11 Javascript
Angular ui-roter 和AngularJS 通过 ocLazyLoad 实现动态(懒)加载模块和依赖
2018/11/25 Javascript
vue-video-player 解决微信自动全屏播放问题(横竖屏导致样式错乱问题)
2020/02/25 Javascript
JS字符串和数组如何实现相互转化
2020/07/02 Javascript
Python简单实现enum功能的方法
2016/04/25 Python
python字典DICT类型合并详解
2017/08/17 Python
Python实现的求解最小公倍数算法示例
2018/05/03 Python
python实现按关键字筛选日志文件
2019/12/24 Python
Python GUI库PyQt5样式QSS子控件介绍
2020/02/25 Python
美国唇部护理专家:Sara Happ
2019/06/19 全球购物
Elizabeth Gage官网:英国最好的珠宝设计之一
2020/09/26 全球购物
Java的for语句中break, continue和return的区别
2013/12/19 面试题
电气自动化大学生求职信
2013/10/16 职场文书
新闻记者个人求职的自我评价
2013/11/28 职场文书
相亲活动方案
2014/08/26 职场文书
Python中常见的导入方式总结
2021/05/06 Python
拒绝盗图!教你怎么用python给图片加水印
2021/06/04 Python
MySQL修改默认引擎和字符集详情
2021/09/25 MySQL