[PHP] 读取大文件并显示

使用PHP读取日志文件,当文件比较大的时候,会报内存不足,因此应该部分读取,读取指定的行数的数据

PHP代码:

<?php
class Test{
    //日志路径
    const LOG_PATH="E:\phpServer\Apache\logs\error.log";
    const NGINX_LOG_PATH="E:\phpServer\\nginx\logs\error.log";
    //显示的行数
    const PAGES=50;
    public static function main(){
        header("content-type:text/html;charset=utf-8");

        if(!empty($_GET[‘action‘])){
            self::$_GET[‘action‘]();
            exit;
        }
    }

    public static function showApacheLogs(){
        $test=new Test();
        $result=$test->readLogs(self::LOG_PATH,self::PAGES);
        $html="";
        foreach($result as $line){
            if(strpos($line,"error:")){
                $line="<font color=‘red‘>".$line."</font>";
            }
            $html.="<div class=‘line‘>".$line."<div>";
        }
        echo $html;
    }
    public static function showNginxLogs(){
        $test=new Test();
        $result=$test->readLogs(self::NGINX_LOG_PATH,self::PAGES);
        $html="";
        foreach($result as $line){
            if(strpos($line,"error")){
                $line="<font color=‘red‘>".$line."</font>";
            }
            $html.="<div class=‘line‘>".$line."<div>";
        }
        echo $html;
    }
    /**
    * 读取日志
    */
    private function readLogs($filePath,$num=20){
        $fp = fopen($filePath,"r");
        $pos = -2;
        $eof = "";
        $head = false;   //当总行数小于Num时,判断是否到第一行了
        $lines = array();
        while($num>0){
            while($eof != "\n"){
                if(fseek($fp, $pos, SEEK_END)==0){    //fseek成功返回0,失败返回-1
                    $eof = fgetc($fp);
                    $pos--;
                }else{                               //当到达第一行,行首时,设置$pos失败
                    fseek($fp,0,SEEK_SET);
                    $head = true;                   //到达文件头部,开关打开
                    break;
                }  

            }
            array_unshift($lines,fgets($fp));
            if($head){ break; }                 //这一句,只能放上一句后,因为到文件头后,把第一行读取出来再跳出整个循环
            $eof = "";
            $num--;
        }
        fclose($fp);
        return array_reverse($lines);
    }
}
Test::main();
?>
<style type="text/css">
*{
    padding: 0;
    margin: 0;
}
.logsBox{
    margin:5px;
    padding: 5px;
    width: 600px;
    background: #000;
    color:#fff;
    font-size: 13px;
    float: left;
}
.logsBox .line{
    margin: 12px 0;
}
</style>
<div class="logsBox apache">
    <div class="line">日志读取...</div>
</div>
<div class="logsBox nginx">
    <div class="line">日志读取...</div>
</div>
<script type="text/javascript" src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script>
<script type="text/javascript">
    $(function(){

        function showLogs(api,showClass){
            function readLogs(){
                $.ajax({
                    url:api,
                    type:"get",
                    dataType:"text",
                    success:function(data){
                        $(showClass).html(data);
                    }
                });
            }
            readLogs();
            setInterval(readLogs,5000);
        }
        showLogs("?action=showNginxLogs",".nginx");
        showLogs("?action=showApacheLogs",".apache");
    });
</script>
时间: 2024-11-06 21:02:06

[PHP] 读取大文件并显示的相关文章

PHP几个快速读取大文件例子

PHP几个快速读取大文件例子 感谢 把我给崩了 的投递 时间:2014-10-16 来源:三联 在PHP中,对于文件的读取时,最快捷的方式莫过于使用一些诸如file.file_get_contents之类的函数,简简单单的几行代码就能很漂亮的完成我们所需要的功能.但当所操作的文件是一个比较大的文件时,这些函数可能就显的力不从心, 下面将从一个需求入手来说明对于读取大文件时,常用的操作方法. 需求 有一个800M的日志文件,大约有500多万行, 用PHP返回最后几行的内容. 实现方法 1. 直接采

PHP如何快速读取大文件

原文:PHP如何快速读取大文件 在PHP中,对于文件的读取时,最快捷的方式莫过于使用一些诸如file.file_get_contents之类的函数,简简单单的几行代码就能 很漂亮的完成我们所需要的功能.但当所操作的文件是一个比较大的文件时,这些函数可能就显的力不从心, 下面将从一个需求入手来说明对于读取大文件时,常用的操作方法. 需求需求 有一个800M的日志文件,大约有500多万行, 用PHP返回最后几行的内容. 实现方法 1. 直接采用file函数来操作 由于 file函数是一次性将所有内容

【转】PHP如何快速读取大文件

在PHP中,对于文件的读取时,最快捷的方式莫过于使用一些诸如file.file_get_contents之类的函数,简简单单的几行代码就能 很漂亮的完成我们所需要的功能.但当所操作的文件是一个比较大的文件时,这些函数可能就显的力不从心, 下面将从一个需求入手来说明对于读取大文件时,常用的操作方法. 需求需求 有一个800M的日志文件,大约有500多万行, 用PHP返回最后几行的内容. 实现方法 1. 直接采用file函数来操作 由于 file函数是一次性将所有内容读入内存,而PHP为了防止一些写

php -- 读取大文件

在PHP中,对于文件的读取时,最快捷的方式莫过于使用一些诸如file.file_get_contents之类的函数,简简单单的几行代码就能 很漂亮的完成我们所需要的功能.但当所操作的文件是一个比较大的文件时,这些函数可能就显的力不从心, 下面将从一个需求入手来说明对于读取大文件时,常用的操作方法. 需求需求有一个800M的日志文件,大约有500多万行, 用PHP返回最后几行的内容. 实现方法1. 直接采用file函数来操作由于 file函数是一次性将所有内容读入内存,而PHP为了防止一些写的比较

php中读取大文件实现方法详解

php中读取大文件实现方法详解 来源:   时间:2013-09-05 19:27:01   阅读数:6186 分享到:0 [导读] 本文章来给各位同学介绍php中读取大文件实现方法详解吧,有需要了解的同学可进入参考参考.需求如下: 现有一个1G左右的日志文件,大约有500多万行, 用php返回最后几行的内容.实现方法:1 直接采用file函数 本文章来给各位同学介绍php中读取大文件实现方法详解吧,有需要了解的同学可进入参考参考. 需求如下: 现有一个1G左右的日志文件,大约有500多万行,

php使用file函数、fseek函数读取大文件效率分析

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

java读取 500M 以上文件,java读取大文件

java 读取txt,java读取大文件 设置缓存大小BUFFER_SIZE ,Config.tempdatafile是文件地址 来源博客http://yijianfengvip.blog.163.com/blog/static/175273432201191354043148/ package com.yjf.util;import java.io.File;import java.io.RandomAccessFile;import java.nio.MappedByteBuffer;imp

Java高效读取大文件

1.概述 本教程将演示如何用Java高效地读取大文件.这篇文章是Baeldung (http://www.baeldung.com/) 上“Java——回归基础”系列教程的一部分. 2.在内存中读取 读取文件行的标准方式是在内存中读取,Guava 和Apache Commons IO都提供了如下所示快速读取文件行的方法: Files.readLines(new File(path), Charsets.UTF_8); FileUtils.readLines(new File(path)); 这种

windows下Perl如何读取大文件的最后一行(总结)

Perl中读取文件最后一行的方法很多,比如 (1)将文件读入数组,取最后一个元素 open (FILE,"file.txt") or die "$!"; my @arr=<FILE>;; close FILE; my $last=$arr[$#arr]; #$last里就是最后一行的内容了. (2)一行一行读入,到最后一行时输出 open (FILE,"file.txt") or die "$!"; while (