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中将数组存到文件里的实现代码
Jan 19 PHP
用PHP书写安全的脚本代码
Feb 05 PHP
php中DOMElement操作xml文档实例演示
Mar 26 PHP
php实现httpclient类示例
Apr 08 PHP
Windows下的PHP安装文件线程安全和非线程安全的区别
Apr 23 PHP
PHP语法自动检查的Vim插件
Aug 11 PHP
php 使用array函数实现分页
Feb 13 PHP
ThinkPHP3.2.3实现分页的方法详解
Jun 03 PHP
学习thinkphp5.0验证类使用方法
Nov 16 PHP
laravel 解决Eloquent ORM的save方法无法插入数据的问题
Oct 21 PHP
PHP利用缓存处理用户注册时的邮箱验证,成功后用户数据存入数据库操作示例
Dec 31 PHP
禁止直接访问php文件代码分享
May 05 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/08/07 PHP
php生成短域名函数
2015/03/23 PHP
Laravel访问出错提示:`Warning: require(/vendor/autoload.php): failed to open stream: No such file or di解决方法
2019/04/02 PHP
简单实用的js调试logger组件实现代码
2010/11/20 Javascript
非常棒的10款jQuery 幻灯片插件
2011/06/14 Javascript
创建你的第一个AngularJS应用的方法
2015/06/16 Javascript
JavaScript基础篇(6)之函数表达式闭包
2015/12/11 Javascript
js实现(全选)多选按钮的方法【附实例】
2016/03/30 Javascript
JavaScript仿flash遮罩动画效果
2016/06/15 Javascript
AngularJS基础 ng-mouseleave 指令详解
2016/08/02 Javascript
js从数组中删除指定值(不是指定位置)的元素实现代码
2016/09/13 Javascript
运用js教你轻松制作html音乐播放器
2020/04/17 Javascript
vue-dialog的弹出层组件
2020/05/25 Javascript
HTML5+jQuery实现搜索智能匹配功能
2017/03/24 jQuery
webpack3+React 的配置全解
2017/08/21 Javascript
JS动态添加的div点击跳转到另一页面实现代码
2017/09/30 Javascript
vue实现图片加载完成前的loading组件方法
2018/02/05 Javascript
Vue中的methods、watch、computed的区别
2018/11/26 Javascript
Node.js console控制台简单用法分析
2019/01/04 Javascript
JS判断数组是否包含某元素实现方法汇总
2020/06/24 Javascript
python翻译软件实现代码(使用google api完成)
2013/11/26 Python
Python列表和元组的定义与使用操作示例
2017/07/26 Python
用Python进行简单图像识别(验证码)
2018/01/19 Python
Python将字符串常量转化为变量方法总结
2019/03/17 Python
python用for循环求和的方法总结
2019/07/08 Python
Python利用多线程同步锁实现多窗口订票系统(推荐)
2019/12/22 Python
pyinstaller将含有多个py文件的python程序做成exe
2020/04/29 Python
Virtualenv 搭建 Py项目运行环境的教程详解
2020/06/22 Python
通过Django Admin+HttpRunner1.5.6实现简易接口测试平台
2020/11/11 Python
施工资料员岗位职责
2014/01/06 职场文书
企业内控岗位的职责
2014/02/07 职场文书
爱心捐款倡议书
2014/04/14 职场文书
司法局群众路线教育实践活动开展情况总结
2014/10/25 职场文书
如何写辞职书
2015/02/26 职场文书
2015年世界环境日活动方案
2015/05/05 职场文书
详解gantt甘特图可拖拽、编辑(vue、react都可用 highcharts)
2021/11/27 Vue.js