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 相关文章推荐
一个查看session内容的函数
Oct 09 PHP
PHP 网页过期时间的控制代码
Jun 29 PHP
Thinkphp多文件上传实现方法
Oct 31 PHP
php数组随机排序实现方法
Jun 13 PHP
php结合正则获取字符串中数字
Jun 19 PHP
用HTML/JS/PHP方式实现页面延时跳转的简单实例
Jul 18 PHP
PHP中的函数声明与使用详解
May 27 PHP
详解PHP函数 strip_tags 处理字符串缺陷bug
Jun 11 PHP
PHP获取对象属性的三种方法实例分析
Jan 03 PHP
PHP基于curl实现模拟微信浏览器打开微信链接的方法示例
Feb 15 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
Dec 25 PHP
TP5多入口设置实例讲解
Dec 15 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下常用正则表达式整理
2010/10/26 PHP
zend optimizer在wamp的基础上安装图文教程
2013/10/26 PHP
jquery 锁定弹出层实现代码
2010/02/23 Javascript
jquery.blockUI.js上传滚动等待效果实现思路及代码
2013/03/18 Javascript
jquery获取被勾选的checked(选中)的那一行的3列和4列的值
2013/07/04 Javascript
Enter回车切换输入焦点实现思路与代码兼容各大浏览器
2014/09/01 Javascript
JavaScript之Object类型介绍
2015/04/01 Javascript
JQuery实现左右滚动菜单特效
2015/09/28 Javascript
使用snowfall.jquery.js实现爱心满屏飞的效果
2017/01/05 Javascript
Angular项目中$scope.$apply()方法的使用详解
2017/07/26 Javascript
浅谈Webpack 持久化缓存实践
2018/03/22 Javascript
JavaScript实现浅拷贝与深拷贝的方法分析
2018/07/05 Javascript
Vue CLI 2.x搭建vue(目录最全分析)
2019/02/27 Javascript
js时间戳转yyyy-MM-dd HH-mm-ss工具类详解
2019/04/30 Javascript
vue轻量级框架无法获取到vue对象解决方法
2019/05/12 Javascript
通过实例了解JS 连续赋值
2019/09/24 Javascript
详解javascript中var与ES6规范中let、const区别与用法
2020/01/11 Javascript
vue简单封装axios插件和接口的统一管理操作示例
2020/02/02 Javascript
jQuery HTML设置内容和属性操作实例分析
2020/05/20 jQuery
python绘制简单折线图代码示例
2017/12/19 Python
python模块之paramiko实例代码
2018/01/31 Python
python实现将汉字保存成文本的方法
2018/11/16 Python
在python 中实现运行多条shell命令
2019/01/07 Python
python 列表输出重复值以及对应的角标方法
2019/06/11 Python
python cv2读取rtsp实时码流按时生成连续视频文件方式
2019/12/25 Python
Python Socket多线程并发原理及实现
2020/12/11 Python
CSS3 特效范例整理
2011/08/22 HTML / CSS
测试工程师岗位职责
2013/11/28 职场文书
鸿星尔克广告词
2014/03/21 职场文书
倡议书格式
2014/04/14 职场文书
企业员工薪酬方案
2014/06/04 职场文书
标准版离职证明书
2014/09/12 职场文书
学习型家庭事迹材料(2016精选版)
2016/02/29 职场文书
创业计划书之美甲店
2019/09/20 职场文书
Mysql Show Profile
2021/04/05 MySQL
mysql性能优化以及配置连接参数设置
2022/05/06 MySQL