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实现多级树型菜单
Oct 09 PHP
php smarty模版引擎中变量操作符及使用方法
Dec 11 PHP
10个可以简化php开发过程的MySQL工具
Apr 11 PHP
深入apache host的配置详解
Jun 09 PHP
PHP中实现生成静态文件的方法缓解服务器压力
Jan 07 PHP
php获取网页标题和内容函数(不包含html标签)
Feb 03 PHP
php获取访问者IP地址汇总
Apr 24 PHP
详解php魔术方法(Magic methods)的使用方法
Feb 14 PHP
PHP针对多用户实现更换头像功能
Sep 04 PHP
PHP连接MySQL数据库并以json格式输出
May 21 PHP
Yii1.1框架实现PHP极光推送消息通知功能
Sep 06 PHP
php tpl模板引擎定义与使用示例
Aug 09 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
通过dbi使用perl连接mysql数据库的方法
2014/04/16 PHP
ThinkPHP CURD方法之data方法详解
2014/06/18 PHP
PHP获取网站中各文章的第一张图片的代码示例
2016/05/20 PHP
PHP session会话操作技巧小结
2016/09/27 PHP
php生出随机字符串
2017/07/06 PHP
php实现的生成排列算法示例
2019/07/25 PHP
javascript 实用的文字链提示框效果
2010/06/30 Javascript
JavaScript 获取当前时间戳的代码
2010/08/05 Javascript
FusionCharts图表显示双Y轴双(多)曲线
2012/11/22 Javascript
纯js实现瀑布流展现照片(自动适应窗口大小)
2013/04/08 Javascript
Javascript合并表格中具有相同内容单元格示例
2013/08/11 Javascript
设置checkbox为只读(readOnly)的两种方式
2013/10/11 Javascript
JavaScript返回网页中锚点数目的方法
2015/04/03 Javascript
javascript实现列表滚动的方法
2015/07/30 Javascript
js简单判断flash是否加载完成的方法
2016/06/21 Javascript
省市区三级联动jquery实现代码
2020/04/15 Javascript
nodejs连接mysql数据库简单封装示例-mysql模块
2017/04/10 NodeJs
Electron autoUpdater实现Windows安装包自动更新的方法
2018/12/24 Javascript
微信小程序自定义tabBar在uni-app的适配详解
2019/09/30 Javascript
[04:27]DOTA2官方论坛水友赛集锦
2013/09/16 DOTA
python模拟登录百度代码分享(获取百度贴吧等级)
2013/12/27 Python
利用python求积分的实例
2019/07/03 Python
python 利用pywifi模块实现连接网络破解wifi密码实时监控网络
2019/09/16 Python
python实现代码统计程序
2019/09/19 Python
pandas数据处理进阶详解
2019/10/11 Python
python分布式计算dispy的使用详解
2019/12/22 Python
升级keras解决load_weights()中的未定义skip_mismatch关键字问题
2020/06/12 Python
Django model重写save方法及update踩坑详解
2020/07/27 Python
python绘制汉诺塔
2021/03/01 Python
一套SQL笔试题
2016/08/14 面试题
天网面试题
2013/04/07 面试题
大专生自荐信
2013/10/04 职场文书
餐厅考勤管理制度
2014/01/28 职场文书
陈欧广告词
2014/03/14 职场文书
质量承诺书范文
2014/03/27 职场文书
2014年职称评定工作总结
2014/11/26 职场文书