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 相关文章推荐
给多个地址发邮件的类
Oct 09 PHP
Search File Contents PHP 搜索目录文本内容的代码
Feb 21 PHP
PHP 图片上传实现代码 带详细注释
Apr 29 PHP
PHP cdata 处理(详细介绍)
Jul 05 PHP
PHP mail()函数使用及配置方法
Jan 14 PHP
PHP中鲜为人知的10个函数
Feb 28 PHP
PHP中strncmp()函数比较两个字符串前2个字符是否相等的方法
Jan 07 PHP
php中static和const关键字用法分析
Dec 07 PHP
mac系统下安装多个php并自由切换的方法详解
Apr 21 PHP
ThinkPHP实现附件上传功能
Apr 27 PHP
利用PHP判断是手机移动端还是PC端访问的函数示例
Dec 14 PHP
PHP中abstract(抽象)、final(最终)和static(静态)原理与用法详解
Jun 05 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
JavaScript实现网页上的浮动广告的简单方法
2013/06/14 Javascript
zTree插件之单选下拉菜单实例代码
2013/11/07 Javascript
使用postMesssage()实现iframe跨域页面间的信息传递
2016/03/29 Javascript
JQuery给select添加/删除节点的实现代码
2016/04/26 Javascript
基于Vuejs框架实现翻页组件
2020/06/29 Javascript
node.js(express)中使用Jcrop进行图片剪切上传功能
2017/04/21 Javascript
jquery实现点击a链接,跳转之后,该a链接处显示背景色的方法
2018/01/18 jQuery
利用angular、react和vue实现相同的面试题组件
2018/02/19 Javascript
vue代理和跨域问题的解决
2018/07/18 Javascript
Vue源码之关于vm.$delete()/Vue.use()内部原理详解
2019/05/01 Javascript
javascript开发实现贪吃蛇游戏
2020/07/31 Javascript
Python标准库之多进程(multiprocessing包)介绍
2014/11/25 Python
Python使用scrapy采集时伪装成HTTP/1.1的方法
2015/04/08 Python
自己使用总结Python程序代码片段
2015/06/02 Python
python Django模板的使用方法
2016/01/14 Python
python3爬虫之设计签名小程序
2018/06/19 Python
Python爬虫之正则表达式的使用教程详解
2018/10/25 Python
Python3.5基础之函数的定义与使用实例详解【参数、作用域、递归、重载等】
2019/04/26 Python
Python多重继承之菱形继承的实例详解
2020/02/12 Python
日本一家专门经营各种箱包的大型网站:Traveler Store
2016/08/03 全球购物
NHL官方在线商店:Shop.NHL.com
2020/05/01 全球购物
一道输出判断型Java面试题
2014/10/01 面试题
大四学生毕业自荐信
2013/11/07 职场文书
简历中的自我评价怎么写
2014/01/29 职场文书
初中生自我评价
2014/02/01 职场文书
护士岗位职责
2014/02/16 职场文书
本科生自荐信
2014/06/18 职场文书
殡葬服务心得体会
2014/09/11 职场文书
2015年百日安全活动总结
2015/03/26 职场文书
开会通知短信大全
2015/04/20 职场文书
2016年三严三实党课学习心得体会
2016/01/06 职场文书
八年级物理教学反思
2016/02/19 职场文书
又涨知识了,自律到底多重要?
2019/06/27 职场文书
诗词赏析-(浣溪沙)
2019/08/13 职场文书
python中如何对多变量连续赋值
2021/06/03 Python
Java用自带的Image IO给图片添加水印
2021/06/15 Java/Android