`
xubaoguo
  • 浏览: 79434 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

PHP 读取大文件

阅读更多

最近在工作中遇到了需要读取系统日志的问题,日志文件很大,大概在1G以上甚至更大,随即研究了读取得方法,直接使用PHP自带的函数就可以解决这几个问题,但是绝对不能使用file和file_get_contents,这两个函数是一次性将文件全部加载进来,如果文件在几十M 还是可以的,但是稍大的文件时不能用的,内存是会溢出的,贴个自己的方法,欢迎大家指教!

01 <?
02 /**
03   
04 * PHP 读取大文件 测试文件大于1G的文本文件
05   
06 *
07   
08 * @copyright(c) 2010 by 高成. All rights reserved
09   
10 * @author 高成
11   
12 *
13   
14 */
15   
16 /**
17   
18 * 文件读取
19   
20 *
21   
22 * @param String $filename 文件地址
23   
24 * @param Int $count 读取得行数
25   
26 * @param String $sep 每行的分隔标记
27   
28 * @return String 返回结果
29   
30 */
31   
32 function readBigFile($filename, $count = 20, $tag = “\r\n”) {
33   
34     $content = ”;//最终内容
35   
36     $_current = ”;//当前读取内容寄存
37   
38     $step= 1;//每次走多少字符
39   
40     $tagLen = strlen($tag);
41   
42     $start = 0;//起始位置
43   
44     $i = 0;//计数器
45   
46     $handle = fopen($filename,’r+’);//读写模式打开文件,指针指向文件头
47   
48     while($i < $count && !feof($handle)) {   //文件没有到结尾和小鱼需要读取得行数时
49   
50         fseek($handle, $start, SEEK_SET);//指针设置在文件开头
51   
52         $_current = fread($handle,$step);//读取文件
53   
54         $content .= $_current;//组合字符串
55   
56         $start += $step;//依据步长向前移动
57   
58         //依据分隔符的长度截取字符串最后免得几个字符
59   
60         $substrTag = substr($content, -$tagLen);
61   
62         if ($substrTag == $tag) {   //判断是否为判断是否是换行或其他分隔符
63   
64             $i++;
65   
66         }
67   
68     }
69   
70     //关闭文件
71   
72     fclose($handle);
73   
74     //返回结果
75   
76     return $content;
77   
78 }
79   
80 $filename = ‘E:/2010log.log’;//需要读取的文件
81   
82 $tag = “\r\n”;//行分隔符 注意这里必须用双引号
83   
84 $count = 20;//读取行数
85   
86 $data = readBigFile($filename,$count,$tag);
87   
88 echo $data;
89   
90 ?>

 

PHP还有其他方法能够解决,比如system函数,不足之处还望指正!

分享到:
评论

相关推荐

    php 读取大文件

    主要是对csv文件的快速读取以及过滤替换,支持search文件传过来的.*(从一个字符串到另一个字符串)^(不包含)的查找~

    php读取大文件示例分享(文件操作类)

    在PHP开发中,处理大文件是一个常见的任务,尤其是在涉及到日志文件、数据文件等的读取和分析时。为了有效地处理大文件,尤其是在内存有限的环境下,需要编写专门的代码来逐行或者分块读取文件,而不是一次性将整个...

    php读写json文件

    PHP 读写 JSON 文件是指使用 PHP 语言来读取和写入 JSON(JavaScript Object Notation)文件的过程。JSON 文件是一种轻量级的数据交换格式,它使用人类可读的文本来存储和传输数据。PHP 语言提供了多种方式来读写 ...

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

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

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

    在PHP中,处理大文件是一项挑战,特别是当需要读取文件的特定部分或者避免一次性加载整个文件到内存中时。以下几种方法可以帮助你更有效地读取大文件。 1. **使用`file`函数**: - `file`函数通常用于读取小型文件...

    php读取大文件最好的实现方法_.docx

    以下是几种在PHP中读取大文件的最佳实践: 1. **逐行读取**: PHP的`fgets()`函数可以用于逐行读取文件,避免一次性加载整个文件。在给定的示例中,`FileLastLines`函数就是这样一个例子。它通过不断回溯文件指针...

    一个读取远程文件的php函数类.zip

    2. `fopen()`和`fread()`:通过打开一个远程文件流,然后读取一定字节数,可以分块读取大文件,避免一次性加载导致内存压力过大。例如: ```php $handle = fopen('http://example.com/remote_file.txt', 'r'); $...

    PHP读取大文件末尾N行的高效方法推荐

    为了解决这一问题,我们可以采用直接操作文件指针的方式来实现高效读取大文件末尾N行的需求。在PHP中,文件指针由fopen()函数打开后,指针指向文件的起始位置,此时位置是0。通过fgets()或fgetc()等函数读取文件内容...

    PHP读取大文件的类SplFileObject使用介绍

    如果加载的文件特别大时,如几百M,上G时,这时性能就降下来了,那么PHP里有没有对大文件的处理函数或者类呢? 答案是:有的。PHP真的越来越“面向对象”了,一些原有的基础的SPL方法都开始陆续地实现出class了。从 ...

    PHP 读取 txt 文件

    而`fopen()`,`fread()`和`fclose()`则适合处理大文件,它们通过文件指针进行操作,可以控制读取的字节数。下面是一个示例: ```php $handle = fopen('path_to_file.txt', 'r'); if ($handle) { while (($line = ...

    PHP超低内存遍历目录文件和读取超大文件的方法

    yield关键字的引入,为PHP的文件操作带来了革命性的变化,它使得在内存受限的环境下,遍历和读取大文件成为可能。在实际应用中,yield可以与各种迭代器进行配合使用,通过合理的数据处理策略,可以有效避免程序在...

    PHP读取PPT文件的方法

    PHP读取PPT文件的知识点: 1. 使用第三方类库PHPPowerPoint:在PHP中读取PPT文件时,可以借助PHPPowerPoint这个第三方类库来实现。PHPPowerPoint允许用户对PowerPoint文件进行操作,包括读取和写入PPTX格式的文件。...

    php 操作INI文件,读取,设置,ini文件

    PHP提供了内置的函数来处理INI文件的读取和写入,使得开发者可以方便地管理和更新应用的配置。 1. **读取INI文件** PHP中的`parse_ini_file()`函数是用于读取INI文件的关键。这个函数接受一个INI文件路径作为参数...

    PHP读写INI文件

    本篇将深入探讨如何使用PHP读写INI文件,以及如何通过此类操作实现类似ASP Application的网站全局变量。 首先,PHP提供了`parse_ini_file()`函数来解析一个INI文件,将其内容转换为关联数组。例如,我们可以使用...

    php大文件上传

    PHP中,可以通过`fread()`函数读取文件的特定部分,`cURL`库则可以用于发送HTTP请求,实现文件分块上传。 为了实现断点续传,我们需要在服务器端保存每个文件块的状态。这包括已上传的块的数量、每个块的大小以及...

    PHP读取打包JS文件

    标题 "PHP读取打包JS文件" 指的是使用PHP编程语言来实现JavaScript文件的合并与读取。在Web开发中,为了优化页面加载速度,通常会将多个JavaScript文件合并成一个大文件,减少HTTP请求的数量。这个过程就称为JS文件...

    php文件流的读取与写入

    在PHP中,文件流操作是一种高效且灵活的方式来处理文件读取和写入。文件流允许开发者以低级的方式控制文件I/O,同时提供了一种跨平台的接口。本主题主要探讨的是如何使用PHP进行文件流的读取和写入。 首先,让我们...

    用PHP读取超大文件的实例代码

    【PHP读取超大文件】在处理大数据量的文件时,传统的逐行读取或一次性加载文件内容的方法可能会导致性能问题或内存不足的错误。PHP提供了多种方式来处理这种情况,尤其是针对超大文件的读取。本文将详细介绍如何使用...

    PHP 读取大文件并显示的简单实例(推荐)

    ### PHP读取大文件的基本思路 首先,传统的读取整个文件到内存中的方法并不适用于大文件。当尝试读取超过PHP内存限制的大文件时,程序将会报内存不足的错误。为了应对这种情况,我们应当采用逐行读取的方式,避免一...

Global site tag (gtag.js) - Google Analytics