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 Notice: Undefined index 错误提示解决方法
Aug 29 PHP
php数据入库前清理 注意php intval与mysql的int取值范围不同
Dec 12 PHP
解析php中eclipse 用空格替换 tab键
Jun 24 PHP
Smarty foreach控制循环次数的实现详解
Jul 03 PHP
那些年我们错过的魔术方法(Magic Methods)
Jan 14 PHP
php导出excel格式数据问题
Mar 11 PHP
php curl登陆qq后获取用户信息时证书错误
Feb 03 PHP
php中ob_flush函数和flush函数用法分析
Mar 18 PHP
文件上传之SWFUpload插件(代码)
Jul 30 PHP
php中session定期自动清理的方法
Nov 12 PHP
php生成txt文件实例代码介绍
Apr 28 PHP
laravel 创建命令行命令的图文教程
Oct 23 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/07/07 PHP
destoon整合UCenter图文教程
2014/06/21 PHP
Yii2 加载css、js 载静态资源的方法
2017/03/10 PHP
实例:用 JavaScript 来操作字符串(一些字符串函数)
2007/02/15 Javascript
Jquery实现的tab效果可以指定默认显示第几页
2013/10/16 Javascript
jquery删除指定子元素代码实例
2015/01/13 Javascript
两种JS实现屏蔽鼠标右键的方法
2020/08/20 Javascript
JavaScript如何禁止Backspace键
2015/12/02 Javascript
canvas实现粒子时钟效果
2017/02/06 Javascript
Angular.JS内置服务$http对数据库的增删改使用教程
2017/05/07 Javascript
JavaScript数据类型和变量_动力节点Java学院整理
2017/06/26 Javascript
JavaScript之map reduce_动力节点Java学院整理
2017/06/29 Javascript
ztree实现左边动态生成树右边为内容详情功能
2017/11/03 Javascript
JavaScript 中定义函数用 var foo = function () {} 和 function foo()区别介绍
2018/03/01 Javascript
浅谈FastClick 填坑及源码解析
2018/03/02 Javascript
vue项目如何刷新当前页面的方法
2018/05/18 Javascript
基于Vue自定义指令实现按钮级权限控制思路详解
2018/05/23 Javascript
关于微信小程序登录的那些事
2019/01/08 Javascript
vue使用codemirror的两种用法
2019/08/27 Javascript
JavaScript Reflect Metadata实现详解
2019/12/12 Javascript
python中urllib模块用法实例详解
2014/11/19 Python
python+openCV利用摄像头实现人员活动检测
2019/06/22 Python
python实现控制COM口的示例
2019/07/03 Python
python中的&amp;&amp;及||的实现示例
2019/08/07 Python
Python协程操作之gevent(yield阻塞,greenlet),协程实现多任务(有规律的交替协作执行)用法详解
2019/10/14 Python
Python读取文件内容为字符串的方法(多种方法详解)
2020/03/04 Python
浅谈如何使用python抓取网页中的动态数据实现
2020/08/17 Python
CSS3 边框效果
2019/11/04 HTML / CSS
在html5的Canvas上绘制椭圆的几种方法总结
2013/01/07 HTML / CSS
AmazeUI 手机版页面的顶部导航条Header与侧边导航栏offCanvas的示例代码
2020/08/19 HTML / CSS
参观考察邀请函范文
2014/01/29 职场文书
鼓励运动员的广播稿
2014/02/08 职场文书
教师节寄语2015
2015/03/23 职场文书
拔河比赛新闻稿
2015/07/17 职场文书
pytorch 运行一段时间后出现GPU OOM的问题
2021/06/02 Python
Java常用函数式接口总结
2021/06/29 Java/Android