当前位置: 首页 > 编程笔记 >

php fseek函数读取大文件两种方法

宦子琪
2023-03-14
本文向大家介绍php fseek函数读取大文件两种方法,包括了php fseek函数读取大文件两种方法的使用技巧和注意事项,需要的朋友参考一下

php读取大文件,使用fseek函数是最为普遍的方式,它不需要将文件的内容全部读入内存,而是直接通过指针来操作,所以效率是相当高效的.在使用fseek来对文件进行操作时,也有多种不同的方法,效率可能也是略有差别的,下面是常用的两种方法.

方法一:

首先通过fseek找到文件的最后一位EOF,然后找最后一行的起始位置,取这一行的数据,再找次一行的起始位置,再取这一行的位置,依次类推,直到找到了$num行。实现代码如下:

整个代码执行完成耗时 0.0095 (s)

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));

 方法二 :

还是采用fseek的方式从文件最后开始读,但这时不是一位一位的读,而是一块一块的读,每读一块数据时,就将读取后的数据放在一个buf里,然后通过换行符(n)的个数来判断是否已经读完最后$num行数据.实现代码如下

整个代码执行完成耗时 0.0009(s).

$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读取大文件的几种方法介绍的使用技巧和注意事项,需要的朋友参考一下 读取大文件一直是一个头痛的问题,我们像使用php开发读取小文件可以直接使用各种函数实现,但一到大文章就会发现常用的方法是无法正常使用或时间太长太卡了,下面我们就一起来看看关于php读取大文件问题解决办法,希望例子能帮助到各位。 场景:PHP读取超大文件,例如1G的日志文件,我

  • 函数名称:读文件返回字符串 函数功能:读文件操作,读取文件内容,返回全部内容的 string 函数方法 str = file.readString (path,encode) 参数 类型 必填 说明 path string 是 需要读取的文件路径 encode string 否 编码格式,不写默认为 utf-8 返回值 类型 说明 str string 文件内容 函数用例 path1 = "/sd

  • 本文向大家介绍python读取各种文件数据方法解析,包括了python读取各种文件数据方法解析的使用技巧和注意事项,需要的朋友参考一下 python读取.txt(.log)文件 、.xml 文件 、excel文件数据,并将数据类型转换为需要的类型,添加到list中详解 1.读取文本文件数据(.txt结尾的文件)或日志文件(.log结尾的文件) 以下是文件中的内容,文件名为data.txt(与dat

  • 本文向大家介绍Python按行读取文件的实现方法【小文件和大文件读取】,包括了Python按行读取文件的实现方法【小文件和大文件读取】的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python按行读取文件的实现方法。分享给大家供大家参考,具体如下: 小文件: 大文件: 更多关于Python相关内容感兴趣的读者可查看本站专题:《Python文件与目录操作技巧汇总》、《Python文本文件操

  • 本文向大家介绍Shell逐行读取文件的4种方法,包括了Shell逐行读取文件的4种方法的使用技巧和注意事项,需要的朋友参考一下 在Linux中有很多方法逐行读取一个文件的方法,其中最常用的就是下面的脚本里的方法,而且是效率最高,使用最多的方法。为了给大家一个直观的感受,我们将通过生成一个大的文件的方式来检验各种方法的执行效率。 方法1:while循环中执行效率最高,最常用的方法。 注释:我习惯把这

  • 本文向大家介绍python简单读取大文件的方法,包括了python简单读取大文件的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python简单读取大文件的方法。分享给大家供大家参考,具体如下: Python读取大文件(GB级别)采用的办法很简单: 例如: 一切都交给python解释器处理,读取效率很高,且占用资源少。 stackoverflow参考链接:How to read la