如何在 PHP 中读取文本文件的最后 5 行?

2023-12-09

我有一个名为file.txt这是通过向其添加行来更新的。

我正在通过这段代码阅读它:

$fp = fopen("file.txt", "r");
$data = "";
while(!feof($fp))
{
$data .= fgets($fp, 4096);
}
echo $data;

并且出现大量的线条。 我只想回显文件的最后 5 行

我怎样才能做到这一点 ?


The file.txt是这样的:

11111111111111
22222222222

33333333333333
44444444444

55555555555555
66666666666

对于大文件,使用 file() 将所有行读入数组有点浪费。以下是读取文件并维护最后 5 行缓冲区的方法:

$lines=array();
$fp = fopen("file.txt", "r");
while(!feof($fp))
{
   $line = fgets($fp, 4096);
   array_push($lines, $line);
   if (count($lines)>5)
       array_shift($lines);
}
fclose($fp);

您可以通过寻找一个位置(例如距离末尾大约 10 行)并进一步返回(如果不能产生 5 行),通过一些关于可能的行长度的启发式方法对此进行进一步优化。这是一个简单的实现,它演示了:

//how many lines?
$linecount=5;

//what's a typical line length?
$length=40;

//which file?
$file="test.txt";

//we double the offset factor on each iteration
//if our first guess at the file offset doesn't
//yield $linecount lines
$offset_factor=1;


$bytes=filesize($file);

$fp = fopen($file, "r") or die("Can't open $file");


$complete=false;
while (!$complete)
{
    //seek to a position close to end of file
    $offset = $linecount * $length * $offset_factor;
    fseek($fp, -$offset, SEEK_END);


    //we might seek mid-line, so read partial line
    //if our offset means we're reading the whole file, 
    //we don't skip...
    if ($offset<$bytes)
        fgets($fp);

    //read all following lines, store last x
    $lines=array();
    while(!feof($fp))
    {
        $line = fgets($fp);
        array_push($lines, $line);
        if (count($lines)>$linecount)
        {
            array_shift($lines);
            $complete=true;
        }
    }

    //if we read the whole file, we're done, even if we
    //don't have enough lines
    if ($offset>=$bytes)
        $complete=true;
    else
        $offset_factor*=2; //otherwise let's seek even further back

}
fclose($fp);

var_dump($lines);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 PHP 中读取文本文件的最后 5 行? 的相关文章

  • PHP邮件功能有时可以工作

    我正在编写一个脚本 需要通过PHP邮件功能发送电子邮件 如下所示 它在向 gmail 帐户发送电子邮件时有效 但在我的域中的帐户却无效 我们正在运行 Exchange 服务器 截至目前 电子邮件是从 www server 发送的 有谁知道
  • php 打印 aa aaa ab aab 直到 zzz 的算法

    你好 我需要打印从 a 到 zzz 最多 3 个字母 例如我的输出应该是 A B Z AA AB AZ BA BB ZZ AAA AAB ZZZ 我在过去的 5 个小时里努力尝试 我找不到任何逻辑 我尝试了下面的代码 PHP 有一个方便的功
  • 如何将 php Web 应用程序转换为桌面应用程序并保留数据库 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我们有一个用 PHP 开发的 Web 应用程序 但大多数客户并没有一直连接到互联网 那么 有没有办法将应用程序转换为桌面应用程序 以便
  • PMA 4.5.2.0 file_exists():open_basedir 限制生效

    从 PPA 在我的 Ubuntu 服务器上安装 phpMyAdmin 后 https launchpad net nijel archive ubuntu phpmyadmin https launchpad net nijel archi
  • 通过jquery传递搜索参数

    我有一个表单 如果用户输入搜索查询 其参数应通过 jquery 传递 并在获取结果后将结果加载到 div 容器中 由于我不太熟悉 jquery 我该怎么做 html currently the data is being displayed
  • Laravel 验证:存在附加列条件 - 自定义验证规则

    在 Laravel 中指定存在验证规则时 是否有一种方法可以引用另一个字段 我希望能够说输入 a 必须存在于表 a 中 输入 b 必须存在于表 b 中 并且表 b 中列 x 的值必须等于输入 a 最好通过例子来解释 public rules
  • 使用 PhpStorm 删除 CakePHP 中的插件后出现“成员有私人访问错误”

    从我的 CakePHP 框架中删除插件以及与其关联的所有代码行后 我在以下位置收到错误getInitializer的功能autoload static php in my vendor gt composer folder public s
  • 为什么当尝试使用 $this->data 访问 CakePHP 时,密码字段为空?

    我正在实现一个身份验证组件 这是我的注册页面 create User array action gt login echo form gt input primary email array size gt 32 echo form gt
  • 基本表创建 fpdf

    我找不到使用 fpdf 制作表格并从 mysql 数据库获取数据的合适教程 我只是想知道如何创建一个 我在网上尝试示例时遇到了很多错误 例如 我有 名字 中间名 姓氏 年龄 和 电子邮件 列 如何使用 fpdf 创建表格并回显数据库中的条目
  • 使用 HTTP-Basic 身份验证发出 HTTP GET 请求

    我需要为我正在开发的 Flash Player 项目构建一个代理 我只需要使用 HTTP Basic 身份验证向另一个 URL 发出 HTTP GET 请求 并提供来自 PHP 的响应 就好像 PHP 文件是原始源一样 我怎样才能做到这一点
  • 将 PHP mcrypt 与 Rijndael/AES 结合使用

    我正在尝试使用 php 中的 mcrypt 和密码 Rijndael 加密一些文本消息 但我不确定 MCRYPT MODE modename 根据 PHP 手册 这些可用 ecb cbc cfb ofb nofb 或 stream 但我读到
  • Facebook 中用户的时区是如何编码的

    我需要检查用户的时区 但我找不到它的真正定义 参考API http developers facebook com docs reference api user says 用户的时区与 UTC 的偏移量 现在在维基百科上这些是可能的时区
  • 如何计算加权平均值?

    我的语言是PHP 但是算法应该是相当通用的 我有一个关联数组 比方说 评级和评级次数 ratings array 1 gt 1 2 gt 3 3 gt 6 4 gt 3 5 gt 3 这相当于 1 2 2 2 3 3 3 3 3 3 4 4
  • 如何在无法重启的服务器(Apache)上使用gettext?

    我在服务器故障上问了这个问题 https serverfault com questions 104224 how do you use gettext on server apache you cant restart但我没有得到任何回应
  • 有什么方法可以在不重新加载的情况下更改标头 URL? [复制]

    这个问题在这里已经有答案了 可能的重复 修改URL而不重新加载页面 https stackoverflow com questions 824349 modify the url without reloading the page 使用新
  • 如何从控制器访问 Zend Framework 应用程序的配置?

    我有一个基于 Zend 框架的应用程序快速开始 http framework zend com docs quickstart setup 我已经让演示工作起来 现在正在实例化一个新的模型类来完成一些实际工作 在我的控制器中 我想将配置参数
  • 如何将参数传递给 Symfony2 中的验证约束 - 在 yml 中

    我正在尝试向我的应用程序添加一个包范围的参数 以便我可以将其添加到我的验证约束文件 validation yml 中 myApp myBundle Entity Contact properties name NotBlank messag
  • 如何使用 PHP 从 MySQL 检索特定值?

    好吧 我已经厌倦了 过去一周我花了大部分空闲时间试图解决这个问题 我知道 SQL 中的查询已更改 但我无法弄清楚 我能找到的所有其他帖子似乎都已经过时了 如果有人能帮助我 我将非常感激 我想做的就是使用手动输入数据库的唯一 密码 来检索行的
  • 图像创建从jpeg() PHP

    我正在使用 imagecreatefromjpeg 函数合并两张图片 现在我面临的问题是 当我使用服务器中的图片时 它工作正常 而当我使用其他网站的图片时 它不起作用 例如 当我使用这个 PHP 文件时http coolfbapps in
  • php56 - CentOS - Remi 仓库

    我刚刚在测试盒上安装了 php 5 6 正常的 cli php 解释器似乎不存在 gt php v bash php command not found gt php56 v PHP 5 6 13 cli built Sep 3 2015

随机推荐

  • PostgreSQL 多值更新插入

    是否可以在 PostgreSQL 中执行多值更新插入 我知道存在多值插入 就像 ON CONFLICT 关键字在密钥被违反时执行更新一样 但是是否有可能将两者结合在一起 像这样的事情 INSERT INTO table1 col1 col2
  • 多个 setState 不会累积到一次更新/渲染中...?

    我记得当我发现这一点时我是多么惊讶setState是异步的 现在我偶然发现了一种 奇怪 的行为 它不符合我的理解setState异步性 考虑下面的一个片段 由于某种原因它会导致Script Error 这是外部沙箱 https codesa
  • Flutter - 在 Firebase 中注册后删除自动登录

    我在 Flutter 中注册时遇到问题 据我所知 firebase 在注册后自动登录用户 我想阻止此操作 因为在我的应用程序中 每个用户都必须得到确认 我在其他主题中看到了这种情况的解决方案 但在我看来 注册后调用注销并不是一个好主意 因为
  • 对于枚举来说,替换失败不是错误 (SFINAE)

    有没有办法对枚举使用替换失败不是错误 SFINAE template
  • 如何在 ARRAYFORMULA 中使用 AVERAGEIFS

    我正在尝试使用AVERAGEIFS inside ARRAYFORMULA 看了其他问题 我得出的结论是 不使用是不可能的QUERY功能 我的目的是在共享相同 ID 时对列的值进行平均 I think 这个问题非常接近我所需要的 但我无法在
  • Tiles 3.0 和 Spring MVC 设置 [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 Tiles 3 0 是否可以与 Spring 3 0 一起运行 需要什么配置 当前版本的
  • EKEventStoreChangedNotification 未触发

    因此 我目前正在使用 EventKit 并试图在本机日历应用程序中添加 修改 删除日历条目时触发 EKEventStoreChangedNotification 但在请求访问日历的权限后 确认我已获得授权并签名等待通知 NSNotifica
  • 如何禁用 Alfresco 主菜单项?

    Alfresco Share 应用程序上的主菜单包含我们部署的项目团队希望禁用的几个项目 特别是 我的文件 和 共享文件 隐藏就足够了 但如果我们能完全禁用它们那就更好了 这些是用户无权访问的功能 他们所有的互动都应该通过网站进行 是否有支
  • 查找某个范围内的最小/最大日期(如果它与其他列的条件匹配)

    A 列是日期 B 列是标准 I want to find the MIN date for each criteria I tried using Ctrl Shift Enter with MIN MATCH B2 B B 0 但这不太正
  • 从 POSIXct 中提取时间

    我如何从一系列的时间中提取时间POSIXct对象丢弃日期部分 例如 我有 times lt structure c 1331086009 50098 1331091427 42461 1331252565 99979 1331252675
  • 如何获得完全合格的 UNC 路径? [复制]

    这个问题在这里已经有答案了 这可能很简单 我只是忽略了一些事情 The FileInfo FileName位于网络共享上的文件的返回结果如下 H Directory1 Dir2 不过我需要的是 server share Directory1
  • QuickFIX/J 启动器 - 在登录时设置用户名和密码

    我正在开发一种解决方案 使用 FIX 协议和 QuickFixj 框架连接到金融市场 具体来说 我正在实现一个启动器 并且需要连接到指定的用户名和密码的接受器 QuickFixj 文档在这方面对于如何将登录消息中的这些字段传递到服务器不是很
  • Android-L 问题:使用 FLAG_ACTIVITY_REORDER_TO_FRONT 启动之前的 Activity 时 onBackpressed 并冻结应用程序一段时间

    我的应用程序有一个奇怪的行为 我按照 Android L O S 上的步骤证明了这个问题 Nexus 7 或 Moto G 等设备 该应用程序从 Activity A 开始 它仅显示一个名为 Launch B 的按钮 按下此按钮 执行sta
  • ASP.NET 回发后保留文件上传

    我正在使用 VB NET 编写一个 Intranet ASP NET 页面 我在处理文件上传时遇到了一个特别令人讨厌的问题 我会尽力解释这个问题 也许有人可以提供帮助 我的问题几乎是重复的this one or this one 除了 文件
  • 猜测算法好像不行,用Python猜数字

    我正在努力研究一些简单的算法 它应该使 python 以尽可能少的猜测来猜测给定的数字 它似乎正在运行 但速度非常慢 我究竟做错了什么 我已经阅读了有关此问题的几个主题 但找不到解决方案 我是一名初学者程序员 所以欢迎任何建议 min 1
  • 尝试在 Ubuntu 中安装 opencv4nodejs 时权限被拒绝

    我试图安装opencv4nodejs in Ubuntu 20 04使用以下命令 我的节点版本是v12 19 0 sudo npm i g opencv4nodejs 但出现这些错误 info install installing open
  • jquery的data(key,val)和attr(data-key,data-val)有什么区别

    如果您尝试使用以下命令更改数据属性值data 方法你不会得到相同的结果attr data key data value 方法 例如 我正在使用data hovered true存储元素的一些状态 如果你有一些 css 样式element d
  • VBA - 从开头查找字符串

    我需要找到一个字符串 c 并且我正在查找的单元格的值为 c 0 32 问题是 在相同的范围内 我有一个值为 blablac 54 的单元格 它排在第一位 并且 Dim x as Integer x Find c MatchCase True
  • 获取 Haskell 数据构造函数的所有字段

    假设我有以下映射我的数据库架构的数据类型 data Object Object classification Text country Text numberOfParts Int Lots of other fields 我想提取数据库中
  • 如何在 PHP 中读取文本文件的最后 5 行?

    我有一个名为file txt这是通过向其添加行来更新的 我正在通过这段代码阅读它 fp fopen file txt r data while feof fp data fgets fp 4096 echo data 并且出现大量的线条 我