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 相关文章推荐
PHP新手上路(七)
Oct 09 PHP
PHP 日期时间函数的高级应用技巧
Oct 10 PHP
浅析PHP页面局部刷新功能的实现小结
Jun 21 PHP
php获取文件内容最后一行示例
Jan 09 PHP
ThinkPHP处理Ajax返回的方法
Nov 22 PHP
使用Appcan客户端自动更新PHP版本号(全)
Jul 31 PHP
举例讲解PHP面对对象编程的多态
Aug 12 PHP
php实现Session存储到Redis
Nov 11 PHP
PHP生成和获取XML格式数据的方法
Mar 04 PHP
yii2中的rules 自定义验证规则详解
Apr 19 PHP
详解yii2使用多个数据库的案例
Jun 16 PHP
thinkPHP5项目中实现QQ第三方登录功能
Oct 20 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和javascript常用正则表达式及用法实例
2014/07/01 PHP
PHP6新特性分析
2016/03/03 PHP
PHP实现数组的笛卡尔积运算示例
2017/12/15 PHP
了解jQuery技巧来提高你的代码
2010/01/08 Javascript
jquery入门—数据删除与隔行变色以及图片预览
2013/01/07 Javascript
jQuery实现类似滑动门切换效果的层切换
2013/09/23 Javascript
JQueryiframe页面操作父页面中的元素与方法(实例讲解)
2013/11/19 Javascript
JavaScript的21条基本知识点
2014/03/04 Javascript
JS实现点击按钮控制Div变宽、增高及调整背景色的方法
2015/08/05 Javascript
Node.js批量给图片加水印的方法
2016/11/15 Javascript
Vuex 使用 v-model 配合 state的方法
2018/11/13 Javascript
vue实现树形结构样式和功能的实例代码
2019/10/15 Javascript
js实现跳一跳小游戏
2020/07/31 Javascript
[01:07:13]TNC vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
Python实现的数据结构与算法之链表详解
2015/04/22 Python
Python读写Json涉及到中文的处理方法
2016/09/12 Python
Python 通配符删除文件的实例
2018/04/24 Python
django manage.py扩展自定义命令方法
2018/05/27 Python
Python开发的十个小贴士和技巧及长常犯错误
2018/09/27 Python
python替换字符串中的子串图文步骤
2019/06/19 Python
python增加图像对比度的方法
2019/07/12 Python
python selenium操作cookie的实现
2020/03/18 Python
Pycharm pyuic5实现将ui文件转为py文件,让UI界面成功显示
2020/04/08 Python
Python正则表达式高级使用方法汇总
2020/06/18 Python
用python制作个音乐下载器
2021/01/30 Python
美国最大的农村生活方式零售店:Tractor Supply Company(TSC)
2017/05/15 全球购物
Omio意大利:全欧洲低价大巴、火车和航班搜索和比价
2017/12/02 全球购物
应届生体育教师自荐信
2013/10/03 职场文书
商场消防演习方案
2014/02/12 职场文书
《夜晚的实验》教学反思
2014/02/19 职场文书
同意迁入证明模板
2014/10/26 职场文书
党员示范岗材料
2014/12/19 职场文书
六一文艺汇演开幕词
2015/01/29 职场文书
企业反腐倡廉心得体会
2015/08/15 职场文书
python实现高效的遗传算法
2021/04/07 Python
GO中sync包自由控制并发示例详解
2022/08/05 Golang