加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 使用fseek逐行读取一个文件

发布时间:2020-12-13 13:47:06 所属栏目:PHP教程 来源:网络整理
导读:如何使用fseek逐行读取文件? 代码可以很有帮助.必须是跨平台和纯php. 提前谢谢了 问候 杰拉 问题是使用fseek,所以只能假设性能是一个问题,而file()不是解决方案.这是一个使用fseek的简单方法: 我的file.txt #file.txtLine 1Line 2Line 3Line 4Line 5 和代
如何使用fseek逐行读取文件?

代码可以很有帮助.必须是跨平台和纯php.

提前谢谢了

问候

杰拉

问题是使用fseek,所以只能假设性能是一个问题,而file()不是解决方案.这是一个使用fseek的简单方法:

我的file.txt

#file.txt
Line 1
Line 2
Line 3
Line 4
Line 5

和代码:

<?php

$fp = fopen('file.txt','r');

$pos = -2; // Skip final new line character (Set to -1 if not present)

$lines = array();
$currentLine = '';

while (-1 !== fseek($fp,$pos,SEEK_END)) {
    $char = fgetc($fp);
    if (PHP_EOL == $char) {
            $lines[] = $currentLine;
            $currentLine = '';
    } else {
            $currentLine = $char . $currentLine;
    }
    $pos--;
}

$lines[] = $currentLine; // Grab final line

var_dump($lines);

输出:

array(5) {
   [0]=>
   string(6) "Line 5"
   [1]=>
   string(6) "Line 4"
   [2]=>
   string(6) "Line 3"
   [3]=>
   string(6) "Line 2"
   [4]=>
   string(6) "Line 1"
}

你不必象我这样追加到$lines数组,如果这是脚本的目的,你可以立即打印输出.如果要限制行数,也很容易引入一个计数器.

$linesToShow = 3;
$counter = 0;
while ($counter <= $linesToShow && -1 !== fseek($fp,SEEK_END)) {
   // Rest of code from example. After $lines[] = $currentLine; add:
   $counter++;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读