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 相关文章推荐
UCenter Home二次开发指南
May 28 PHP
codeigniter框架The URI you submitted has disallowed characters错误解决方法
May 06 PHP
zend framework框架中url大小写问题解决方法
Aug 19 PHP
php实现按指定大小等比缩放生成上传图片缩略图的方法
Dec 15 PHP
PHP获取数组最大值下标的方法
May 12 PHP
php+ajax注册实时验证功能
Jul 20 PHP
让ThinkPHP的模板引擎达到最佳效率的方法详解
Mar 14 PHP
PHP读取CSV大文件导入数据库的实例
Jul 24 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
Aug 29 PHP
PHP进阶学习之命名空间基本用法分析
Jun 18 PHP
php中加密解密DES类的简单使用方法示例
Mar 26 PHP
宝塔面板出现“open_basedir restriction in effect. ”的解决方法
Mar 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
在IIS7.0下面配置PHP 5.3.2运行环境的方法
2010/04/13 PHP
PHP读取PDF内容配合Xpdf的使用
2012/11/24 PHP
解析dedecms空间迁移步骤详解
2013/05/15 PHP
PHP调用MySQL存储过程并返回值的方法
2014/12/26 PHP
PHP实现的敏感词过滤方法示例
2019/03/06 PHP
IE autocomplete internet explorer's autocomplete
2007/06/30 Javascript
效率高的Javscript字符串替换函数的benchmark
2008/08/02 Javascript
jquery 的 $(&quot;#id&quot;).html() 无内容的解决方法
2010/06/07 Javascript
用jQuery获取IE9下拉框默认值问题探讨
2013/07/22 Javascript
jquery实现带单选按钮的表格行选中时高亮显示
2013/08/01 Javascript
js自动生成对象的属性示例代码
2013/10/28 Javascript
动态标签 悬停效果 延迟加载示例代码
2013/11/21 Javascript
JS小功能(offsetLeft实现图片滚动效果)实例代码
2013/11/28 Javascript
jquery对ajax的支持介绍
2013/12/10 Javascript
jquery中$(#form :input)与$(#form input)的区别
2014/08/18 Javascript
Javascript HTML5 Canvas实现的一个画板
2020/04/12 Javascript
Google 地图控件集详解及实例代码
2016/08/06 Javascript
jQuery 插件实现随机自由弹跳气泡样式
2017/01/12 Javascript
jQuery插件echarts设置折线图中折线线条颜色和折线点颜色的方法
2017/03/03 Javascript
Three.js的使用及绘制基础3D图形详解
2017/04/27 Javascript
nodejs超出最大的调用栈错误问题
2017/12/27 NodeJs
[46:43]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#2LGD VS MVP.Phx第二局
2016/03/02 DOTA
[01:02:09]Liquid vs TNC 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21
2020/07/19 DOTA
python基于BeautifulSoup实现抓取网页指定内容的方法
2015/07/09 Python
Python argparse模块应用实例解析
2019/11/15 Python
Python selenium 自动化脚本打包成一个exe文件(推荐)
2020/01/14 Python
浅谈tensorflow 中tf.concat()的使用
2020/02/07 Python
Python Matplotlib简易教程(小白教程)
2020/07/28 Python
带有css3动画效果的兼容多浏览器简单导航条示例
2014/01/26 HTML / CSS
css3使网页、图片变成灰色兼容大多数浏览器
2014/07/02 HTML / CSS
硕士研究生自我鉴定
2013/11/08 职场文书
竞选班长演讲稿
2013/12/30 职场文书
房屋买卖协议书范本
2014/04/10 职场文书
财务总监岗位职责
2015/02/03 职场文书
居住证明范文
2015/06/17 职场文书
详细聊聊关于Mysql联合查询的那些事儿
2021/10/24 MySQL