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 相关文章推荐
批量修改RAR文件注释的php代码
Nov 20 PHP
使用PHP备份MYSQL数据的多种方法
Jan 15 PHP
PHPExcel内存泄漏问题解决方法
Jan 23 PHP
详解PHP序列化反序列化的方法
Oct 27 PHP
PHP入门教程之操作符与控制结构流程详解
Sep 09 PHP
利用phpexcel对数据库数据的导入excel(excel筛选)、导出excel
Apr 27 PHP
php 猴子摘桃的算法
Jun 20 PHP
PHP数据分析引擎计算余弦相似度算法示例
Aug 08 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
Aug 30 PHP
Yii框架模拟组件调用注入示例
Nov 11 PHP
TP5框架实现自定义分页样式的方法示例
Apr 05 PHP
PHP+Mysql分布式事务与解决方案深入理解
Feb 27 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计划任务、定时执行任务的实现代码
2011/04/23 PHP
php实现利用phpexcel导出数据
2013/08/24 PHP
在WordPress中获取数据库字段内容和添加主题设置菜单
2016/01/11 PHP
php获取访问者浏览页面的浏览器类型
2017/01/23 PHP
保证JavaScript和Asp、Php等后端程序间传值编码统一
2009/04/17 Javascript
基于MooTools的很有创意的滚动条时钟动画
2010/11/14 Javascript
解决css和js的{}与smarty定界符冲突问题的两种方法
2013/09/10 Javascript
鼠标经过tr时,改变tr当前背景颜色
2014/01/13 Javascript
document.compatMode的CSS1compat使用介绍
2014/04/03 Javascript
Backbone.js的Hello World程序实例
2015/06/19 Javascript
JavaScript判断变量是否为数组的方法(Array)
2016/02/24 Javascript
jQuery封装的屏幕居中提示信息代码
2016/06/08 Javascript
微信小程序顶部导航栏滑动tab效果
2019/01/28 Javascript
vue发送websocket请求和http post请求的实例代码
2019/07/11 Javascript
解决vue.js提交数组时出现数组下标的问题
2019/11/05 Javascript
关于vue利用postcss-pxtorem进行移动端适配的问题
2019/11/20 Javascript
[33:23]VG vs Pain 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[01:02:55]CHAOS vs Mineski 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
python命令行参数sys.argv使用示例
2014/01/28 Python
Python中的闭包详细介绍和实例
2014/11/21 Python
python中json格式数据输出的简单实现方法
2016/10/31 Python
python实现画五角星和螺旋线的示例
2019/01/20 Python
python3+PyQt5 数据库编程--增删改实例
2019/06/17 Python
pyqt5对用qt designer设计的窗体实现弹出子窗口的示例
2019/06/19 Python
浅谈Python里面None True False之间的区别
2020/07/09 Python
记一次python 爬虫爬取深圳租房信息的过程及遇到的问题
2020/11/24 Python
美国最佳选择产品网站:Best Choice Products
2019/05/27 全球购物
请解释接口的显式实现有什么意义
2012/05/26 面试题
渗透攻击的测试步骤
2014/06/07 面试题
上班打牌检讨书
2014/02/07 职场文书
财务科科长岗位职责
2014/03/10 职场文书
纪律教育学习心得体会
2014/09/02 职场文书
2015年乡镇环保工作总结
2015/04/22 职场文书
二审代理词范文
2015/05/25 职场文书
redis限流的实际应用
2021/04/24 Redis
聊聊Python中关于a=[[]]*3的反思
2021/06/02 Python