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伪造referer突破网盘禁止外连的代码
Jun 15 PHP
php采集时被封ip的解决方法
Aug 29 PHP
php懒人函数 自动添加数据
Jun 28 PHP
php ios推送(代码)
Jul 01 PHP
Smarty变量调节器失效的解决办法
Aug 20 PHP
十幅图告诉你什么是PHP引用
Feb 22 PHP
PHP统计目录中文件以及目录中目录大小的方法
Jan 09 PHP
php版微信公众平台接口参数调试实现判断用户行为的方法
Sep 23 PHP
深入理解PHP的远程多会话调试
Sep 21 PHP
详解PHP文件的自动加载(autoloading)
Feb 04 PHP
php微信公众号开发之微信企业付款给个人
Oct 04 PHP
php微信公众号开发之答题连闯三关
Oct 20 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之static静态属性与静态方法实例分析
2015/07/30 PHP
PHP开发实现微信退款功能示例
2017/11/25 PHP
laravel 执行迁移回滚示例
2019/10/23 PHP
JS的反射问题
2010/04/07 Javascript
js 自制滚动条的小例子
2013/03/16 Javascript
Jquery实现遮罩层的方法
2015/06/08 Javascript
深入剖析javascript中的exec与match方法
2016/05/18 Javascript
jQuery中的insertBefore(),insertAfter(),after(),before()区别介绍
2016/09/01 Javascript
Bootstrap组合上、下拉框简单实现代码
2017/03/06 Javascript
QRCode.js:基于JQuery的生成二维码JS库的使用
2017/06/23 jQuery
解决vue-cli项目webpack打包后iconfont文件路径的问题
2018/09/01 Javascript
详解vue-cli3多页应用改造
2019/06/04 Javascript
layer弹出框确定前验证:弹出消息框的方法(弹出两个layer)
2019/09/21 Javascript
微信小程序实现简单的select下拉框
2020/11/23 Javascript
[01:09:01]完美世界DOTA2联赛循环赛 Magma vs PXG BO2第一场 10.28
2020/10/28 DOTA
python装饰器使用方法实例
2013/11/21 Python
Python中创建二维数组
2018/10/17 Python
python获取Linux发行版名称
2019/08/30 Python
Tensorflow矩阵运算实例(矩阵相乘,点乘,行/列累加)
2020/02/05 Python
django 数据库 get_or_create函数返回值是tuple的问题
2020/05/15 Python
在Pytorch中使用Mask R-CNN进行实例分割操作
2020/06/24 Python
Django如何实现防止XSS攻击
2020/10/13 Python
Python+OpenCV图像处理——图像二值化的实现
2020/10/24 Python
html5中去掉input type date默认样式的方法
2018/09/06 HTML / CSS
HTML5+CSS3模仿优酷视频截图功能示例
2017/01/05 HTML / CSS
Tory Burch英国官方网站:美国时尚生活品牌
2017/12/06 全球购物
现代生活方式的家具和装饰:Dot & Bo
2018/12/26 全球购物
师范生的个人求职信范文
2014/01/04 职场文书
行政办公室岗位职责
2014/03/18 职场文书
学生安全责任书
2014/04/15 职场文书
大学生交通专业求职信
2014/09/01 职场文书
2014年销售工作总结
2014/12/01 职场文书
公务员考察材料范文
2014/12/23 职场文书
教师岗位职责
2015/02/03 职场文书
python多线程方法详解
2022/01/18 Python
vue如何在data中引入图片的正确路径
2022/06/05 Vue.js