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.ini 中文版
Oct 28 PHP
php下通过伪造http头破解防盗链的代码
Jul 03 PHP
PHP获取当前页面完整URL的实现代码
Jun 10 PHP
使用php判断服务器是否支持Gzip压缩功能
Sep 24 PHP
php汉字转拼音的示例
Feb 27 PHP
php实现无限级分类查询(递归、非递归)
Mar 10 PHP
ThinkPHP模板Volist标签嵌套循环输出多维数组的方法
Mar 23 PHP
php分页原理 分页代码 分页类制作教程
Sep 23 PHP
php无限级分类实现方法分析
Oct 19 PHP
PHP常用函数总结(180多个)
Dec 25 PHP
php微信公众号开发之二级菜单
Oct 20 PHP
PHP设计模式(八)装饰器模式Decorator实例详解【结构型】
May 02 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
基于MySQL体系结构的分析
2013/05/02 PHP
PHP实现加密的几种方式介绍
2015/02/22 PHP
php实现比较全的数据库操作类
2015/06/18 PHP
PHP API接口必备之输出json格式数据示例代码
2017/06/27 PHP
PHP 中 var_export、print_r、var_dump 调试中的区别
2018/06/19 PHP
jquery与google map api结合使用 控件,监听器
2010/03/04 Javascript
IE下window.onresize 多次调用与死循环bug处理方法介绍
2013/11/12 Javascript
转换字符串为json对象的方法详解
2013/11/29 Javascript
Javascript writable特性介绍
2015/02/27 Javascript
原生Js实现简易烟花爆炸效果的方法
2015/03/20 Javascript
小程序开发实战:实现九宫格界面的导航的代码实现
2017/01/19 Javascript
JS 实现随机验证码功能
2017/02/15 Javascript
js实现下拉菜单效果
2017/03/01 Javascript
利用canvas中toDataURL()将图片转为dataURL(base64)的方法详解
2017/11/20 Javascript
vue 点击按钮增加一行的方法
2018/09/07 Javascript
vue.js+element-ui动态配置菜单的实例
2018/09/07 Javascript
详解ES6 Symbol 的用途
2018/10/14 Javascript
JQuery特殊效果和链式调用操作示例
2019/05/13 jQuery
详解VUE调用本地json的使用方法
2019/05/15 Javascript
Vue项目中使用jquery的简单方法
2019/05/16 jQuery
jQuery位置选择器用法实例分析
2019/06/28 jQuery
Vue 3.0 全家桶抢先体验
2020/04/28 Javascript
python使用Tkinter显示网络图片的方法
2015/04/24 Python
tensorflow 恢复指定层与不同层指定不同学习率的方法
2018/07/26 Python
对python列表里的字典元素去重方法详解
2019/01/21 Python
python3实现字符串操作的实例代码
2019/04/16 Python
python3读取csv文件任意行列代码实例
2020/01/13 Python
Django认证系统user对象实现过程解析
2020/03/02 Python
利物浦足球俱乐部官方商店(美国):Liverpool FC US
2019/10/09 全球购物
自动一体化专业求职信
2014/03/15 职场文书
有关爱国演讲稿
2014/05/07 职场文书
电气工程及其自动化专业求职信
2014/06/23 职场文书
党员民主评议自我评价
2014/10/20 职场文书
大学生国家助学金感谢信
2015/01/23 职场文书
2015年行政执法工作总结
2015/05/23 职场文书
2016消防宣传标语口号
2015/12/26 职场文书