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


Posted in PHP onAugust 12, 2016

使用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>

以上这篇PHP 读取大文件并显示的简单实例(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP4与PHP3中一个不兼容问题的解决方法
Oct 09 PHP
php时间不正确的解决方法
Apr 09 PHP
PHP禁止个别IP访问网站
Oct 30 PHP
php面向对象中static静态属性与方法的内存位置分析
Feb 08 PHP
php中stdClass的用法分析
Feb 27 PHP
PHP生成唯一订单号的方法汇总
Apr 16 PHP
PHP使用file_get_content设置头信息的方法
Feb 14 PHP
PHP+MySQL实现的简单投票系统实例
Feb 24 PHP
PHP编写学校网站上新生注册登陆程序的实例分享
Mar 21 PHP
php版微信公众平台接口开发之智能回复开发教程
Sep 22 PHP
PHP jpgraph库的配置及生成统计图表:折线图、柱状图、饼状图
May 15 PHP
phpStudy vscode 搭建debug调试的教程详解
Jul 28 PHP
PHPWind9.0手动屏蔽验证码解决后台关闭验证码但是依然显示的问题
Aug 12 #PHP
PHP请求Socket接口测试实例
Aug 12 #PHP
php+jquery+html实现点击不刷新加载更多的实例代码
Aug 12 #PHP
php网页版聊天软件实现代码
Aug 12 #PHP
PHP 自动加载的简单实现(推荐)
Aug 12 #PHP
py文件转exe时包含paramiko模块出错解决方法
Aug 12 #PHP
PHP url的pathinfo模式加载不同控制器的简单实现
Aug 12 #PHP
You might like
基于PHP一些十分严重的缺陷详解
2013/06/03 PHP
一漂亮的PHP图片验证码实例
2014/03/21 PHP
PHP取余函数介绍MOD(x,y)与x%y
2014/05/15 PHP
php中mkdir函数用法实例分析
2014/11/15 PHP
PHP中使用file_get_contents抓取网页中文乱码问题解决方法
2014/12/17 PHP
搭建基于Docker的PHP开发环境的详细教程
2015/07/01 PHP
制作个性化的WordPress登陆界面的实例教程
2016/05/21 PHP
jquery中使用$(#form).submit()重写提交表单无效原因分析及解决
2013/03/25 Javascript
中文字符串截取的js函数代码
2013/04/17 Javascript
jquery easyui combox一些实用的小方法
2013/12/25 Javascript
jquery css 设置table的奇偶行背景色示例
2014/06/03 Javascript
页面加载完后自动执行一个方法的js代码
2014/09/06 Javascript
javascript生成随机数方法汇总
2015/11/12 Javascript
jQuery判断浏览器并动态调整select宽度的方法
2016/03/02 Javascript
同步异步动态引入js文件的几种方法总结
2016/09/23 Javascript
基于Vue如何封装分页组件
2016/12/16 Javascript
Vue中使用Sortable的示例代码
2018/04/07 Javascript
jQuery实现遍历XML节点和属性的方法示例
2018/04/29 jQuery
vue拖拽组件使用方法详解
2018/12/01 Javascript
[02:28]DOTA2 2017国际邀请赛小组赛回顾
2017/08/09 DOTA
python实现2014火车票查询代码分享
2014/01/10 Python
Python中数字以及算数运算符的相关使用
2015/10/12 Python
Tensorflow卷积神经网络实例进阶
2018/05/24 Python
Python UnboundLocalError和NameError错误根源案例解析
2018/10/31 Python
python dataframe向下向上填充,fillna和ffill的方法
2018/11/28 Python
python计算Content-MD5并获取文件的Content-MD5值方式
2020/04/03 Python
使用Python文件读写,自定义分隔符(custom delimiter)
2020/07/05 Python
HTML5的革新 结构之美
2011/06/20 HTML / CSS
英国排名第一的在线宠物用品商店:Monster Pet Supplies
2018/05/20 全球购物
有影响力的人、名人和艺术家的官方商品:Represent
2019/11/26 全球购物
美术师范毕业生自荐信
2013/11/16 职场文书
大学生求职自荐信
2013/12/12 职场文书
应用数学专业求职信
2014/03/14 职场文书
庆元旦活动总结
2014/07/09 职场文书
2019生态环境保护倡议书!
2019/07/03 职场文书
深入理解redis中multi与pipeline
2021/06/02 Redis