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 相关文章推荐
支持oicq头像的留言簿(二)
Oct 09 PHP
javascript 小型动画组件与实现代码
Jun 02 PHP
php数组相加 array(“a”)+array(“b”)结果还是array(“a”)
Sep 19 PHP
服务器变量 $_SERVER 的深入解析
Jul 02 PHP
6种php上传图片重命名的方法实例
Nov 04 PHP
php弹出对话框实现重定向代码
Jan 23 PHP
PHP开发框架Laravel数据库操作方法总结
Sep 03 PHP
thinkphp的URL路由规则与配置实例
Nov 26 PHP
PHP实用函数分享之去除多余的0
Feb 06 PHP
php中preg_replace正则替换用法分析【一次替换多个值】
Jan 17 PHP
php 静态属性和静态方法区别详解
Apr 09 PHP
PHP实现数组转JSon和JSon转数组的方法示例
Jun 14 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极大的增强功能和性能
2006/10/09 PHP
php实现获取及设置用户访问页面语言类
2014/09/24 PHP
php实现字符串翻转的方法
2015/03/27 PHP
php使用Jpgraph创建3D饼形图效果示例
2017/02/15 PHP
PHP7 整型处理机制修改
2021/03/09 PHP
Javascript模块化编程(一)AMD规范(规范使用模块)
2013/01/17 Javascript
onbeforeunload与onunload事件异同点总结
2013/06/24 Javascript
关于javascript event flow 的一个bug详解
2013/09/17 Javascript
JavaScript实现重置表单(reset)的方法
2015/04/02 Javascript
介绍JavaScript的一个微型模版
2015/06/24 Javascript
jQuery实现自定义右键菜单的树状菜单效果
2015/09/02 Javascript
jquery事件的ready()方法使用详解
2015/11/11 Javascript
跟我学习javascript的垃圾回收机制与内存管理
2015/11/23 Javascript
使用struts2+Ajax+jquery验证用户名是否已被注册
2016/03/22 Javascript
第十章之巨幕页头缩略图与警告框组件
2016/04/25 Javascript
js添加千分位的实现代码(超简单)
2016/08/01 Javascript
AngularJS控制器之间的通信方式详解
2016/11/03 Javascript
JS简单实现表格排序功能示例
2016/12/20 Javascript
JS实现拖拽的方法分析
2016/12/20 Javascript
Vue自定义图片懒加载指令v-lazyload详解
2020/12/31 Javascript
swiper Scrollbar滚动条组件详解
2019/09/08 Javascript
vue登录注册实例详解
2019/09/14 Javascript
微信小程序实用代码段(收藏版)
2019/12/17 Javascript
实现vuex原理的示例
2020/10/21 Javascript
[46:43]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第三局
2016/02/28 DOTA
[54:58]完美世界DOTA2联赛PWL S2 LBZS vs Rebirth 第一场 11.25
2020/11/25 DOTA
python写日志文件操作类与应用示例
2019/07/01 Python
Python中求对数方法总结
2020/03/10 Python
Opencv图像处理:如何判断图片里某个颜色值占的比例
2020/06/03 Python
美国购买和销售礼品卡平台:Raise
2017/01/13 全球购物
Manduka官网:瑜伽垫、瑜伽毛巾和服装
2018/07/02 全球购物
Seavenger官网:潜水服、浮潜、靴子和袜子
2020/03/05 全球购物
亚马逊新加坡官方网站:Amazon.sg
2020/03/25 全球购物
幼儿园教师自我鉴定
2014/03/20 职场文书
婚纱店策划方案
2014/05/22 职场文书
办护照工作证明
2014/10/01 职场文书