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 相关文章推荐
Apache设置虚拟WEB
Oct 09 PHP
PHP $_SERVER详解
Jan 16 PHP
第4章 数据处理-php字符串的处理-郑阿奇(续)
Jul 04 PHP
php array的学习笔记
May 16 PHP
使用php 获取时间今天明天昨天时间戳的详解
Jun 20 PHP
国外十大最流行的PHP框架排名
Jul 04 PHP
php分页函数示例代码分享
Feb 24 PHP
Windows下的PHP 5.3.x安装 Zend Guard Loader教程
Sep 06 PHP
phpmyadmin提示The mbstring extension is missing的解决方法
Dec 17 PHP
PHP将Excel导入数据库及数据库数据导出至Excel的方法
Jun 24 PHP
WordPress中用于更新伪静态规则的PHP代码实例讲解
Dec 18 PHP
PHP实现的用户注册表单验证功能简单示例
Feb 25 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
在Mac上编译安装PHP7的开发环境
2015/07/28 PHP
Smarty环境配置与使用入门教程
2016/05/11 PHP
thinkPHP自动验证、自动添加及表单错误问题分析
2016/10/17 PHP
PHP封装的XML简单操作类完整实例
2017/11/13 PHP
thinkPHP中钩子的使用方法实例分析
2017/11/16 PHP
golang实现php里的serialize()和unserialize()序列和反序列方法详解
2018/10/30 PHP
jquery模拟按下回车实现代码
2011/09/20 Javascript
基于jQuery.Hz2Py.js插件实现的汉字转拼音特效
2015/05/07 Javascript
基于js里调用函数时,函数名带括号和不带括号的区别
2016/07/28 Javascript
自定义require函数让浏览器按需加载Js文件
2016/11/24 Javascript
深入理解Javascript中的作用域链和闭包
2017/04/25 Javascript
将 vue 生成的 js 上传到七牛的实例
2017/07/28 Javascript
vue组件实现弹出框点击显示隐藏效果
2020/10/26 Javascript
使用Node搭建reactSSR服务端渲染架构
2018/08/30 Javascript
vue 解决form表单提交但不跳转页面的问题
2019/10/30 Javascript
深入理解 TypeScript Reflect Metadata
2019/12/12 Javascript
vue el-upload上传文件的示例代码
2020/12/21 Vue.js
Python引用(import)文件夹下的py文件的方法
2014/08/26 Python
Python IDLE清空窗口的实例
2018/06/25 Python
Python3进制之间的转换代码实例
2019/08/24 Python
Python如何通过Flask-Mail发送电子邮件
2020/01/29 Python
Python字符串及文本模式方法详解
2020/09/10 Python
维珍澳洲航空官网:Virgin Australia
2017/09/08 全球购物
个人简历自我评价八例
2013/10/31 职场文书
校园创业策划书
2014/01/14 职场文书
安全生产检讨书
2014/01/21 职场文书
《盲人摸象》教学反思
2014/02/16 职场文书
优秀共青团员事迹材料
2014/12/25 职场文书
参观监狱警示教育心得体会
2016/01/15 职场文书
2016年企业安全生产月活动总结
2016/04/06 职场文书
理解深度学习之深度学习简介
2021/04/14 Python
游戏开发中如何使用CocosCreator进行音效处理
2021/04/14 Javascript
Python中else的三种使用场景
2021/06/16 Python
Java 关于String字符串原理上的问题
2022/04/07 Java/Android
关于Redis的主从复制及哨兵问题
2022/06/16 Redis
Go 内联优化让程序员爱不释手
2022/06/21 Golang