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实际应用经验篇(6)
Oct 09 PHP
火车头采集器3.0采集图文教程
Mar 17 PHP
php 数组二分法查找函数代码
Feb 16 PHP
zen cart新进商品的随机排序修改方法
Sep 10 PHP
php 变量未定义等错误的解决方法
Jan 12 PHP
求PHP数组最大值,最小值的代码
Oct 31 PHP
第五章 php数组操作
Dec 30 PHP
php 多关键字 高亮显示实现代码
Apr 23 PHP
基于php上传图片重命名的6种解决方法的详细介绍
Apr 28 PHP
php fread读取文件注意事项
Sep 24 PHP
阿里云Win2016安装Apache和PHP环境图文教程
Mar 11 PHP
docker-compose部署php项目实例详解
Jul 30 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使用fputcsv()函数csv文件读写数据的方法
2015/01/06 PHP
深入解析WordPress中加载模板的get_template_part函数
2016/01/11 PHP
php实现二叉树中和为某一值的路径方法
2018/10/14 PHP
删除重复数据的算法
2006/11/23 Javascript
jQuery 使用手册(三)
2009/09/23 Javascript
js监听表单value的修改同步问题,跨浏览器支持
2009/12/31 Javascript
JS setCapture 区域外事件捕捉
2010/03/18 Javascript
颜色选择器 Color Picker,IE,Firefox,Opera,Safar
2010/11/25 Javascript
关于jquery append() html时的小问题的解决方法
2010/12/16 Javascript
基于javascript 闭包基础分享
2013/07/10 Javascript
让html页面不缓存js的实现方法
2014/10/31 Javascript
移动Web中图片自适应的两种JavaScript解决方法
2015/06/18 Javascript
JavaScript实现搜索框的自动完成功能(一)
2016/02/25 Javascript
使用vue.js写一个tab选项卡效果
2017/03/25 Javascript
JavaScript实现的选择排序算法实例分析
2017/04/14 Javascript
详解Vue取消eslint语法限制
2018/08/04 Javascript
vue this.reload 方法 配置
2018/09/12 Javascript
对vue下点击事件传参和不传参的区别详解
2018/09/15 Javascript
JointJS流程图的绘制方法
2018/12/03 Javascript
JS实现求5的阶乘示例
2019/01/21 Javascript
Vue toFixed保留两位小数的3种方式
2020/10/23 Javascript
python实现从网络下载文件并获得文件大小及类型的方法
2015/04/28 Python
在Django的视图中使用数据库查询的方法
2015/07/16 Python
Python使用SocketServer模块编写基本服务器程序的教程
2016/07/12 Python
numpy中以文本的方式存储以及读取数据方法
2018/06/04 Python
Tensorflow读取并输出已保存模型的权重数值方式
2020/01/04 Python
Django搭建项目实战与避坑细节详解
2020/12/06 Python
Ubuntu20下的Django安装的方法步骤
2021/01/24 Python
css3强大的动画效果animate使用说明及浏览器兼容介绍
2013/01/09 HTML / CSS
用HTML5制作烟火效果的教程
2015/05/12 HTML / CSS
导师推荐信范文
2014/05/09 职场文书
2014年庆祝国庆65周年演讲稿
2014/09/21 职场文书
物业工程部岗位职责
2015/02/11 职场文书
收入证明范本
2015/06/12 职场文书
六五普法先进个人主要事迹材料
2015/11/03 职场文书
廉洁自律承诺书2016
2016/03/25 职场文书