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

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

时间: 2024-10-28 22:53:21

php fseek函数读取大文件两种方法的相关文章

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

php读取大文件,使用fseek函数是最为普遍的方式,它不需要将文件的内容全部读入内存,而是直接通过指针来操作,所以效率是相当高效的.在使用fseek来对文件进行操作时,也有多种不同的方法,效率可能也是略有差别的,下面是常用的两种方法. 方法一: 首先通过fseek找到文件的最后一位EOF,然后找最后一行的起始位置,取这一行的数据,再找次一行的起始位置,再取这一行的位置,依次类推,直到找到了$num行.实现代码如下: 整个代码执行完成耗时 0.0095 (s) function tail($fp

php使用file函数、fseek函数读取大文件效率对比分析_php技巧

php读取大文件可以使用file函数和fseek函数,但是二者之间效率可能存在差异,本文章向大家介绍php file函数与fseek函数实现大文件读取效率对比分析,需要的朋友可以参考一下. 1. 直接采用file函数来操作 由于 file函数是一次性将所有内容读入内存,而PHP为了防止一些写的比较糟糕的程序占用太多的内存而导致系统内存不足,使服务器出现宕机,所以默认情况下限制只能最大使用内存16M,这是通过php.ini里的 memory_limit = 16M 来进行设置,这个值如果设置-1,

xml-关于安卓设置按钮回退到上一个activity的问题 ,问下大神两种方法的不同。

问题描述 关于安卓设置按钮回退到上一个activity的问题 ,问下大神两种方法的不同. 1.第一种是常规的添加按钮监听,使用finish回退到上一个activit运行成功. 2.查资料后,还有一种解决方式为在xml文件按钮中设置android:onClick=""back"",然后在调用当前xml文件的activity中编写back()方法包含finish()结束当前的activity,自己编写的代码不报错,但是回退到上一个界面是会弹出无法运行界面,然后回退到上一

Java读取Map的两种方法与对比_java

前言 在java中遍历Map有不少的方法.这篇文章我们就来看一下Java读取Map的两种方法以及这两种方法的对比. 一. 遍历Map方法A Map map = new HashMap(); Iterator iter = map.entrySet().iterator(); while (iter.hasNext()) { Map.Entry entry = (Map.Entry) iter.next(); Object key = entry.getKey(); Object val = en

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

读取大文件一直是一个头痛的问题,我们像使用php开发读取小文件可以直接使用各种函数实现,但一到大文章就会发现常用的方法是无法正常使用或时间太长太卡了,下面我们就一起来看看关于php读取大文件问题解决办法,希望例子能帮助到各位. 在PHP中,对于文件的读取时,最快捷的方式莫过于使用一些诸如file.file_get_contents之类的函数,简简单单的几行代码就能 很漂亮的完成我们所需要的功能.但当所操作的文件是一个比较大的文件时,这些函数可能就显的力不从心, 下面将从一个需求入手来说明对于读取

修改PHP配置文件上传大文件几种方法(apache/nginx)

windows+apache+php环境 在apache最常见的PHP上传文件大小限制是通过 php.ini 配置文件定义的,通过修改以下三个字段的值,重新启用服务器端程序(如 apache),便可成功修改PHP上传文件的大小限制: upload_max_filesize = 8M post_max_size = 10M memory_limit = 20M 具体配置如下 在php.ini里查找  代码如下 复制代码 max_execution_time 默认是30秒.改为  代码如下 复制代码

Photoshop让眼睛变大的两种方法

  一.变换比列放大法 1.我们打开图片,选中椭圆选框工具,选中脸部分.执行选择-修改-羽化-5px(Shift+F6) 图01 图02 2.ctrl+J复制出眼睛部分,得到眼睛图层,因为是羽化的所以边缘融合效果好点. 图03 3.我们按着 ctrl+T 编辑- 自由变换.勾选锁链按钮,放大合适的大小(这里106%},其实已经变大很多了. 图04 因为从中心向外变大 我们一般不需要调整位置,直接按Enter确定. 4.因为我们加上了羽化效果,所以基本没有什么破绽的地方,只是眼睛变大后,稍微覆盖到

ASP.NET读取XML文件4种方法分析_实用技巧

方法一 :使用XML控件 代码 复制代码 代码如下: <% @ Page Language="C#"%> <html> <body> <h3><font face="Verdana">读取XML方法一</font></h3> <from runat=server> <asp:Xml id="xml1" DocumentSource="g

php 使用file_get_contents读取大文件的方法_php技巧

当我们遇到文本文件体积很大时,比如超过几十M甚至几百M几G的大文件,用记事本或者其它编辑器打开往往不能成功,因为他们都需要把文件内容全部放到内存里面,这时就会发生内存溢出而打开错误,遇到这种情况我们可以使用PHP的文件读取函数file_get_contents()进行分段读取. 函数说明 string file_get_contents ( string $filename [, bool $use_include_path [, resource $context [, int $offset