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的朋友 经常问的一些问题。不断更新
Aug 11 PHP
php中的注释、变量、数组、常量、函数应用介绍
Nov 16 PHP
举例详解PHP脚本的测试方法
Aug 05 PHP
大家在抢红包,程序员在研究红包算法
Aug 31 PHP
PHP中list方法用法示例
Dec 01 PHP
PHP+JavaScript实现无刷新上传图片
Feb 21 PHP
使用phpQuery获取数组的实例
Mar 13 PHP
thinkPHP5.0框架独立配置与动态配置方法
Mar 17 PHP
PHP性能测试工具xhprof安装与使用方法详解
Apr 29 PHP
php微信公众号开发之答题连闯三关
Oct 20 PHP
php日志函数error_log用法实例分析
Sep 23 PHP
php面向对象重点知识分享
Sep 27 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
世界咖啡生产者论坛呼吁:需要立即就咖啡价格采取认真行动
2021/03/06 咖啡文化
PHP中is_file()函数使用指南
2015/05/08 PHP
php版微信公众平台之微信网页登陆授权示例
2016/09/23 PHP
yii2中关于加密解密的那些事儿
2018/06/12 PHP
关于PHP虚拟主机概念及如何选择稳定的PHP虚拟主机
2018/11/20 PHP
小议Function.apply() 之一------(函数的劫持与对象的复制)
2006/11/30 Javascript
jQuery lazyload 的重复加载错误以及修复方法
2010/11/19 Javascript
JavaScript中“过于”犀利地for/in循环使用示例
2013/10/22 Javascript
js读取配置文件自写
2014/02/11 Javascript
javascript日期格式化示例分享
2014/03/05 Javascript
Jquery 获取指定标签的对象及属性的设置与移除
2014/05/29 Javascript
javascript实现验证IP地址等相关信息代码
2015/05/10 Javascript
Web前端开发工具——bower依赖包管理工具
2016/03/29 Javascript
jQuery+ajax实现实用的点赞插件代码
2016/07/06 Javascript
利用JS提交表单的几种方法和验证(必看篇)
2016/09/17 Javascript
webpack打包js文件及部署的实现方法
2017/12/18 Javascript
angular6.0使用教程之父组件通过url传递id给子组件的方法
2018/06/30 Javascript
node(koa2) web应用模块介绍详解
2019/03/29 Javascript
JS使用H5实现图片预览功能
2019/09/30 Javascript
vue iview实现动态新增和删除
2020/06/17 Javascript
[43:14]Liquid vs Optic 2018国际邀请赛淘汰赛BO3 第二场 8.21
2018/08/22 DOTA
python tornado微信开发入门代码
2018/08/24 Python
python利用百度AI实现文字识别功能
2018/11/27 Python
python实现自动解数独小程序
2019/01/21 Python
scrapy-redis的安装部署步骤讲解
2019/02/27 Python
利用selenium爬虫抓取数据的基础教程
2019/06/10 Python
python多进程并行代码实例
2019/09/30 Python
pycharm 中mark directory as exclude的用法详解
2020/02/14 Python
python 工具 字符串转numpy浮点数组的实现
2020/03/14 Python
Python调用百度OCR实现图片文字识别的示例代码
2020/07/17 Python
pytorch学习教程之自定义数据集
2020/11/10 Python
基于Python的接口自动化unittest测试框架和ddt数据驱动详解
2021/01/27 Python
某公司.Net方向面试题
2014/04/24 面试题
酒店开业策划方案
2014/06/02 职场文书
幼儿园大班区域活动总结
2014/07/09 职场文书
vue-cli4.5.x快速搭建项目
2021/05/30 Vue.js