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 相关文章推荐
Optimizer与Debugger兼容性问题的解决方法
Dec 01 PHP
php守护进程 加linux命令nohup实现任务每秒执行一次
Jul 04 PHP
php开发留言板的CRUD(增,删,改,查)操作
Apr 19 PHP
PHP连接MongoDB示例代码
Sep 06 PHP
解析PHP跳出循环的方法以及continue、break、exit的区别介绍
Jul 01 PHP
PHP函数preg_match_all正则表达式的基本使用详细解析
Aug 31 PHP
codeigniter教程之多文件上传使用示例
Feb 11 PHP
php结合curl实现多线程抓取
Jul 09 PHP
PHP获取指定时间段之间的 年,月,天,时,分,秒
Jun 05 PHP
php 可变函数使用小结
Jun 12 PHP
PHP面向对象程序设计(OOP)之方法重写(override)操作示例
Dec 21 PHP
PHP7导出Excel报ERR_EMPTY_RESPONSE解决方法
Apr 16 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 mysql操作mysql_connect连接数据库实例详解
2016/12/26 PHP
PHP实现动态创建XML文档的方法
2018/03/30 PHP
thinkphp 5框架实现登陆,登出及session登陆状态检测功能示例
2019/10/10 PHP
imagettftext() 失效,不起作用
2021/03/09 PHP
JavaScript Math.ceil() 函数使用介绍
2013/12/11 Javascript
JavaScript获取图片的原始尺寸以宽度为例
2014/05/04 Javascript
前端轻量级MVC框架CanJS详解
2014/09/26 Javascript
jQuery实现摸拟alert提示框
2016/05/22 Javascript
js实时获取窗口大小变化的实例代码
2016/11/18 Javascript
详解Vue学习笔记入门篇之组件的内容分发(slot)
2017/07/17 Javascript
vuex 的简单使用
2018/03/22 Javascript
如何用RxJS实现Redux Form
2018/12/29 Javascript
jQuery移动端跑马灯抽奖特效升级版(抽奖概率固定)实现方法
2019/01/18 jQuery
vue.js实现只能输入数字的输入框
2019/10/19 Javascript
[02:14]2016国际邀请赛中国区预选赛Ehome晋级之路
2016/07/01 DOTA
Python列表list数组array用法实例解析
2014/10/28 Python
python实现周期方波信号频谱图
2018/07/21 Python
python tkinter界面居中显示的方法
2018/10/11 Python
关于Python作用域自学总结
2019/06/10 Python
python pytest进阶之xunit fixture详解
2019/06/27 Python
Python如何实现感知器的逻辑电路
2020/12/25 Python
LocalStorage记住用户和密码功能
2017/07/24 HTML / CSS
世界上最大的高分辨率在线图片库:Alamy
2018/07/07 全球购物
物流专业大学生求职信范文
2013/10/28 职场文书
大学生蛋糕店创业计划书
2014/01/13 职场文书
医药类个人求职的自我评价
2014/02/12 职场文书
给老婆的保证书范文
2014/04/28 职场文书
环卫工人节活动总结
2014/08/29 职场文书
岗位竞聘报告范文
2014/11/06 职场文书
个人总结格式范文
2015/03/09 职场文书
2015年度酒店客房部工作总结
2015/05/25 职场文书
立春观后感
2015/06/18 职场文书
2016高一新生军训心得体会
2016/01/11 职场文书
教师理论学习心得体会
2016/01/21 职场文书
创业计划书之酒厂
2019/10/14 职场文书
如何判断pytorch是否支持GPU加速
2021/06/01 Python