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自定义函数返回多个值
Nov 26 PHP
Joomla下利用configuration.php存储简单数据
May 19 PHP
PHP下通过exec获得计算机的唯一标识[CPU,网卡 MAC地址]
Jun 09 PHP
通过PHP current函数获取未知字符键名数组第一个元素的值
Jun 24 PHP
PHP如何利用P3P实现跨域
Aug 24 PHP
php实现天干地支计算器示例
Mar 14 PHP
Codeigniter控制器controller继承问题实例分析
Jan 19 PHP
PHPStrom 新建FTP项目以及在线操作教程
Oct 16 PHP
PHP判断密码强度的方法详解
May 26 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
Dec 21 PHP
JSON PHP中,Json字符串反序列化成对象/数组的方法
May 31 PHP
PHP使用非对称加密算法RSA
Apr 21 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/09/09 PHP
微信公众平台开发教程③ PHP实现微信公众号支付功能图文详解
2019/04/10 PHP
修改Laravel自带的认证系统的User类的命名空间的步骤
2019/10/15 PHP
php的单例模式及应用场景详解
2021/02/27 PHP
JQuery 写的个性导航菜单
2009/12/24 Javascript
为开发者准备的10款最好的jQuery日历插件
2014/02/04 Javascript
js 通过cookie实现刷新不变化树形菜单
2014/10/30 Javascript
jQuery使用attr()方法同时设置多个属性值用法实例
2015/03/26 Javascript
jQuery使用slideUp方法实现控制元素缓慢收起
2015/03/27 Javascript
javascript下使用Promise封装FileReader
2016/02/19 Javascript
jQuery获取剪贴板内容的方法
2016/06/16 Javascript
微信小程序 数据交互与渲染实例详解
2017/01/21 Javascript
JavaScript中匿名函数的递归调用
2017/01/22 Javascript
JavaScript中数组Array.sort()排序方法详解
2017/03/01 Javascript
vue 路由嵌套高亮问题的解决方法
2018/05/17 Javascript
vue实现的下拉框功能示例
2019/01/29 Javascript
JavaScript多种页面刷新方法小结
2019/04/04 Javascript
layer插件实现在弹出层中弹出一警告提示并关闭弹出层的方法
2019/09/24 Javascript
Vue-router中hash模式与history模式的区别详解
2020/12/15 Vue.js
React服务端渲染原理解析与实践
2021/03/04 Javascript
Flask SQLAlchemy一对一,一对多的使用方法实践
2013/02/10 Python
Python 函数基础知识汇总
2018/03/09 Python
解读python如何实现决策树算法
2018/10/11 Python
python调用百度地图WEB服务API获取地点对应坐标值
2019/01/16 Python
如何运行.ipynb文件的图文讲解
2019/06/27 Python
python中bytes和str类型的区别
2019/10/21 Python
Python爬虫requests库多种用法实例
2020/05/28 Python
微信html5页面调用第三方位置导航的示例
2018/03/14 HTML / CSS
日语专业推荐信
2013/11/12 职场文书
珍珠鸟教学反思
2014/02/01 职场文书
环保建议书作文
2014/03/12 职场文书
cf搞笑广告词
2014/03/14 职场文书
组织鉴定材料
2014/06/02 职场文书
拾金不昧表扬稿
2015/01/16 职场文书
关于Vue中的options选项
2022/03/22 Vue.js
MySQL范围查询优化的场景实例详解
2022/06/10 MySQL