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 会话(session 时间设定)使用入门代码
Jun 05 PHP
供参考的 php 学习提高路线分享
Oct 23 PHP
从零开始学YII2框架(三)扩展插件yii2-gird
Aug 20 PHP
一个比较不错的PHP日历类分享
Nov 18 PHP
PHP面向对象之后期静态绑定功能介绍
May 18 PHP
php验证码实现代码(3种)
Sep 07 PHP
CodeIgniter配置之database.php用法实例分析
Jan 20 PHP
ThinkPHP设置禁止百度等搜索引擎转码(简单实用)
Feb 15 PHP
Ajax实现对静态页面的文章访问统计功能示例
Oct 10 PHP
php利用嵌套数组拼接与解析json的方法
Feb 07 PHP
PHP实现的微信公众号扫码模拟登录功能示例
May 30 PHP
php 获取音视频时长,PHP 利用getid3 获取音频文件时长等数据
Apr 01 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 多维数组排序实现代码
2009/08/05 PHP
PHP无刷新上传文件实现代码
2011/09/19 PHP
php json_encode奇怪问题说明
2011/09/27 PHP
JS实现在页面随时自定义背景颜色的方法
2015/02/27 Javascript
jQuery控制li上下循环滚动插件用法实例(附demo源码下载)
2016/05/28 Javascript
JS中正则表达式只有3种匹配模式(没有单行模式)详解
2016/07/28 Javascript
浅谈Cookie的生命周期问题
2016/08/02 Javascript
AngularJS基础 ng-value 指令简单示例
2016/08/03 Javascript
理解nodejs的stream和pipe机制的原理和实现
2017/08/12 NodeJs
安装vue-cli的简易过程
2018/05/22 Javascript
2种在vue项目中使用百度地图的简单方法
2018/09/28 Javascript
初学node.js中实现删除用户路由
2019/05/27 Javascript
微信小程序实现上传多个文件 超过10个
2020/03/30 Javascript
Vue ​v-model相关知识总结
2021/01/28 Vue.js
[36:33]完美世界DOTA2联赛循环赛 Matador vs Forest 第一场 11.06
2020/11/06 DOTA
Python实现控制台进度条功能
2016/01/04 Python
python脚本实现数据导出excel格式的简单方法(推荐)
2016/12/30 Python
Python中防止sql注入的方法详解
2017/02/25 Python
Python 常用的安装Module方式汇总
2017/05/06 Python
python中logging包的使用总结
2018/02/28 Python
python 脚本生成随机 字母 + 数字密码功能
2018/05/26 Python
Python使用pickle模块储存对象操作示例
2018/08/15 Python
python函数与方法的区别总结
2019/06/23 Python
python中struct模块之字节型数据的处理方法
2019/08/27 Python
python编写微信公众号首图思路详解
2019/12/13 Python
Python3标准库之dbm UNIX键-值数据库问题
2020/03/24 Python
升级keras解决load_weights()中的未定义skip_mismatch关键字问题
2020/06/12 Python
Python ellipsis 的用法详解
2020/11/20 Python
详解CSS3阴影 box-shadow的使用和技巧总结
2016/12/03 HTML / CSS
h5网页水印SDK的实现代码示例
2019/02/19 HTML / CSS
英国助听器购物网站:Hearing Direct
2018/08/21 全球购物
党风廉政承诺书
2014/03/27 职场文书
介绍信范文
2015/01/31 职场文书
公司会议开幕词
2016/03/03 职场文书
Jupyter Notebook 如何修改字体和大小以及更改字体样式
2021/06/03 Python
MySQL transaction事务安全示例讲解
2022/06/21 MySQL