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 相关文章推荐
漂亮但不安全的CTB
Oct 09 PHP
隐藏X-Space个人空间下方版权方法隐藏X-Space个人空间标题隐藏X-Space个人空间管理版权方法
Feb 22 PHP
PHP XML数据解析代码
May 26 PHP
php天翼开放平台短信发送接口实现方法
Dec 22 PHP
Yii的Srbac插件用法详解
Jul 14 PHP
PHP HTTP 认证实例详解
Nov 03 PHP
浅谈PHP表单提交(POST&amp;GET&amp;URL编/解码)
Apr 03 PHP
[原创]PHP正则删除html代码中a标签并保留标签内容的方法
May 23 PHP
php和asp语法上的区别总结
May 12 PHP
Laravel框架实现文件上传的方法分析
Sep 29 PHP
laravel框架学习笔记之组件化开发实现方法
Feb 01 PHP
PHP 使用位运算实现四则运算的代码
Mar 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
基于php导出到Excel或CSV的详解(附utf8、gbk 编码转换)
2013/06/25 PHP
PHP return语句另类用法不止是在函数中
2014/09/17 PHP
[原创]php获取数组中键值最大数组项的索引值
2015/03/17 PHP
如何判断php mysqli扩展类是否开启
2016/12/24 PHP
PHP使用preg_split()分割特殊字符(元字符等)的方法分析
2017/02/04 PHP
laravel 5.1下php artisan migrate的使用注意事项总结
2017/06/07 PHP
PHP简单验证码功能机制实例详解
2019/03/27 PHP
javascript之解决IE下不渲染的bug
2007/06/29 Javascript
js 判断 enter 事件
2009/02/12 Javascript
利用JQuery为搜索栏增加tag提示
2009/06/22 Javascript
js动态给table添加/删除tr的方法
2013/08/02 Javascript
javascript里绝对用的上的字符分割函数总结
2014/07/31 Javascript
浅析Node.js查找字符串功能
2014/09/03 Javascript
js和jquery如何获取图片真实的宽度和高度
2014/09/28 Javascript
jQuery切换所有复选框选中状态的方法
2015/07/02 Javascript
基于Jquery代码实现支持PC端手机端幻灯片代码
2015/11/17 Javascript
jquery实现简单文字提示效果
2015/12/02 Javascript
JavaScript驾驭网页-DOM
2016/03/24 Javascript
纯js模仿windows系统日历
2017/02/04 Javascript
百度小程序自定义通用toast组件
2019/07/17 Javascript
vue自定义表单生成器form-create使用详解
2019/07/19 Javascript
使用python 获取进程pid号的方法
2014/03/10 Python
Python urllib、urllib2、httplib抓取网页代码实例
2015/05/09 Python
Django项目中实现使用qq第三方登录功能
2019/08/13 Python
Python多进程编程multiprocessing代码实例
2020/03/12 Python
Python Opencv实现单目标检测的示例代码
2020/09/08 Python
pycharm2020.2 配置使用的方法详解
2020/09/16 Python
python性能测试工具locust的使用
2020/12/28 Python
Python 实现劳拉游戏的实例代码(四连环、重力四子棋)
2021/03/03 Python
美国最大的存储市场:SpareFoot
2018/07/23 全球购物
公务员培训自我鉴定
2013/09/19 职场文书
工程专业求职自荐书范文
2014/02/18 职场文书
安全目标责任书
2014/07/22 职场文书
pyqt5蒙版遮罩mask,setmask的使用
2021/06/11 Python
关于JS中的作用域中的问题思考分享
2022/04/06 Javascript
Fluentd搭建日志收集服务
2022/09/23 Servers