广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >php如何读大文件某几行
  • 246
分享到

php如何读大文件某几行

2023-06-25 15:06:33 246人浏览 薄情痞子
摘要

本篇内容介绍了“PHP如何读大文件某几行”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!php读大文件某几行的实现方法:1、直接采用file函

本篇内容介绍了“PHP如何读大文件某几行”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

php读大文件某几行的实现方法:1、直接采用file函数来操作;2、调用linux的tail命令来显示最后几行;3、使用PHP的fseek进行文件操作;4、通过PHP的stream_get_line函数实现读取。

php如何读大文件某几行

本文操作环境:windows7系统、PHP7.1版、DELL G3电脑

php 怎么读大文件 某几行?

PHP读取大文件的多种方法介绍

读取大文件一直是一个头痛的问题,我们像使用php开发读取小文件可以直接使用各种函数实现,但一到大文章就会发现常用的方法是无法正常使用或时间太长太卡了,下面我们就一起来看看关于php读取大文件问题解决办法,希望例子能帮助到各位。

在PHP中,对于文件的读取时,最快捷的方式莫过于使用一些诸如file、file_get_contents之类的函数,简简单单的几行代码就能 很漂亮的完成我们所需要的功能。但当所操作的文件是一个比较大的文件时,这些函数可能就显的力不从心, 下面将从一个需求入手来说明对于读取大文件时,常用的操作方法。

需求:

有一个800M的日志文件,大约有500多万行, 用PHP返回最后几行的内容。

实现方法:

直接采用file函数来操作

  由于 file函数是一次性将所有内容读入内存,而PHP为了防止一些写的比较糟糕的程序占用太多的内存而导致系统内存不足,使服务器出现宕机,所以默认情况下限制只能最大使用内存16M,这是通过php.ini里的 memory_limit = 16M 来进行设置,这个值如果设置-1,则内存使用量不受限制。

下面是一段用file来取出这具文件最后一行的代码:

<?php  ini_set('memory_limit', '-1');  $file = 'access.log';  $data = file($file);  $line = $data[count($data) - 1];  echo $line;?>

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

  我机器是2个G的内存,当按下F5运行时,系统直接变灰,差不多20分钟后才恢复过来,可见将这么大的文件全部直接读入内存,后果是多少严重,所以不在万 不得以,memory_limit这东西不能调得太高,否则只有打电话给机房,让reset机器了。

直接调用Linux的 tail 命令来显示最 后几行

  在Linux命令行下,可以直接使用 tail -n 10 access.log 很轻易的显示日志文件最后几行,可以直接用PHP来调用tail命令,执行PHP代码如下:

<?php  $file = 'access.log';  $file = escapeshellarg($file); // 对命令行参数进行安全转义  $line = `tail -n 1 $file`;  echo $line;?>

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

直接使用PHP的 fseek 来进行文件操作

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

方法一

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

实现代码如下

<?php$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?>

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

方法二

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

实现代码如下

<?php$fp = fopen($file, "r");$num = 10;$chunk = 4096;$fs = sprintf("%u", filesize($file));$max = (intval($fs) == PHP_INT_MAX) ? PHP_INT_MAX : filesize($file);for ($len = 0; $len < $max; $len += $chunk){ $seekSize = ($max - $len > $chunk) ? $chunk : $max - $len; fseek($fp, ($len + $seekSize) * -1, SEEK_END); $readData = fread($fp, $seekSize) . $readData; if (substr_count($readData, "\n") >= $num + 1) { preg_match("!(.*?\n){" . ($num) . "}$!", $readData, $match); $data = $match[0]; break; }}fclose($fp);echo $data;?>

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

方法三

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

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

方法四,PHP的stream_get_line函数 ,读取快速,读取50万条数据大文件,大概需要20秒左右的时间!例子代码如下

$fp = fopen('./iis.log', 'r'); //文件 while (!feof($fp)) {  //for($j=1;$j<=1000;$j++) {     //读取下面的1000行并存储到数组中  $logarray[] = stream_get_line($fp, 65535, "\n");     // break; // }    }

“php如何读大文件某几行”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: php如何读大文件某几行

本文链接: https://www.lsjlt.com/news/305633.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • php如何读大文件某几行
    本篇内容介绍了“php如何读大文件某几行”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!php读大文件某几行的实现方法:1、直接采用file函...
    99+
    2023-06-25
  • php 怎么读大文件 某几行
    本文操作环境:windows7系统、PHP7.1版、DELL G3电脑php 怎么读大文件 某几行?PHP读取大文件的多种方法介绍读取大文件一直是一个头痛的问题,我们像使用php开发读取小文件可以直接使用各种函数实现,但一到大文章就会发现常...
    99+
    2019-06-14
    php
  • linux如何查看文件某几行
    这篇文章主要讲解了“linux如何查看文件某几行”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linux如何查看文件某几行”吧!linux查看文件某几行的方法:1、使用sed命令,语法“se...
    99+
    2023-06-30
  • linux如何读取文件的前几行
    今天小编给大家分享一下linux如何读取文件的前几行的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。在linux中,可用hea...
    99+
    2023-06-30
  • php如何删除文件某一行
    本篇内容主要讲解“php如何删除文件某一行”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php如何删除文件某一行”吧!php删除文件某一行的方法:首先定义操作文件;然后读取文件数据到数组中;最后...
    99+
    2023-06-20
  • Nodejs如何进行大文件读写
    这篇文章主要介绍了Nodejs如何进行大文件读写的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Nodejs如何进行大文件读写文章都会有所收获,下面我们一起来看看吧。一、node...
    99+
    2022-10-19
  • 详解PHP如何读取大文件
    目录衡量成功我们有什么选择?逐行读取文件文件之间的管道其他流过滤器自定义流创建自定义协议和过滤器总结衡量成功 唯一能确认我们对代码所做改进是否有效的方式是:衡量一个糟糕的情况,然后对...
    99+
    2022-11-12
  • php怎么读取大文件末尾n行
    这篇文章主要介绍“php怎么读取大文件末尾n行”,在日常操作中,相信很多人在php怎么读取大文件末尾n行问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”php怎么读取大文件末尾n行”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-20
  • PHP如何读取单行文件
    这篇文章给大家分享的是有关PHP如何读取单行文件的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。PHP 读取单行文件 - fgets()fgets() 函数用于从文件读取单行。下例...
    99+
    2022-10-19
  • php如何逐行读取文件
    这篇文章主要讲解了“php如何逐行读取文件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php如何逐行读取文件”吧!有一个名为“test.txt”的文本文件,里面的内容为:我们如何逐行读取文...
    99+
    2023-06-20
  • java如何读取大文件文本
    Java可以使用`BufferedReader`类来读取大文件文本。`BufferedReader`类提供了一个`readLine(...
    99+
    2023-08-08
    java
  • php如何删除某个文件
    这篇文章将为大家详细讲解有关php如何删除某个文件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。php删除某个文件的方法:首先创建一个PHP示例文件;然后声明一个需要删除的文件路径;最后通过PHP中的un...
    99+
    2023-06-14
  • php读取文件最后几行数据的代码是什么
    本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑php读取文件最后几行数据实现思想:借助file()函数将整个文件数据存入数组中,每一行数据对应一个数组元素借助array_slice()函数获取数组中后几个元素即可。...
    99+
    2018-11-25
    php 读取文件
  • 如何用BAT实时读取某个文件目录下文件数
    这篇文章主要讲解了“如何用BAT实时读取某个文件目录下文件数”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何用BAT实时读取某个文件目录下文件数”吧!最近帮助一个朋友制作一个简单的课件展示...
    99+
    2023-06-08
  • python如何流式读取大文件
    这篇文章将为大家详细讲解有关python如何流式读取大文件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。如何流式读取大文件使用with&hellip;open&hellip;可以从文件中读...
    99+
    2023-06-27
  • java如何读取某个文件夹中的全部文件(包括子文件夹)
    目录java读取某个文件夹中的全部文件主要思路示例java获取文件夹下指定的文件java读取某个文件夹中的全部文件 主要思路 使用file.listFiles()函数可以获取到某文...
    99+
    2022-12-03
    java读取文件 java读取全部文件 java读取子文件夹
  • PHP如何读取Excel文件
    这篇“PHP如何读取Excel文件”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“PHP如何读取Excel文件”文章吧。应该有...
    99+
    2023-06-29
  • linux如何查看文件前几行
    小编给大家分享一下linux如何查看文件前几行,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在linux中,可以利用head命令查看文件前几行,该命令用于查看文件...
    99+
    2023-06-22
  • linux如何删除文件前几行
    这篇文章主要介绍linux如何删除文件前几行,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在linux中,可以利用sed命令删除文件的前几行,该命令可依照脚本的指令来处理、编辑文本文件,能够配合正则表达式实现删除文件...
    99+
    2023-06-29
  • php如何读取文件内容
    在PHP中,可以使用`file_get_contents()`函数来读取文件内容。该函数接受一个参数,即要读取的文件的路径,返回文件...
    99+
    2023-08-15
    php
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作