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 Coding Tips(php小技巧)[2011/04/02最后更新]
May 02 PHP
PHP中使用unset销毁变量并内存释放问题
Jul 05 PHP
Apache中php.ini的设置方法
Feb 28 PHP
php中使用base HTTP验证的方法
Apr 20 PHP
php面向对象与面向过程两种方法给图片添加文字水印
Aug 26 PHP
利用php_imagick实现复古效果的方法
Oct 18 PHP
PHP使用递归算法无限遍历数组示例
Jan 13 PHP
[原创]php实现数组按拼音顺序排序的方法
May 03 PHP
php 生成加密公钥加密私钥实例详解
Jun 16 PHP
PHP+AJAX 投票器功能
Nov 11 PHP
PHP手机短信验证码实现流程详解
May 17 PHP
Laravel框架Eloquent ORM修改数据操作示例
Dec 03 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 adodb介绍
2009/03/19 PHP
ThinkPHP模板比较标签用法详解
2014/06/30 PHP
php中chdir()函数用法实例
2014/11/13 PHP
php使用COPY函数更新配置文件的方法
2015/06/18 PHP
PHP合并数组+号和array_merge的区别
2015/06/25 PHP
php使用gd2绘制基本图形示例(直线、圆、正方形)
2017/02/15 PHP
基于win2003虚拟机中apache服务器的访问
2017/08/01 PHP
php-fpm中max_children的配置
2019/03/15 PHP
Jquery 组合form元素为json格式,asp.net反序列化
2009/07/09 Javascript
一些常用且实用的原生JavaScript函数
2010/09/08 Javascript
浅谈javascript函数式编程
2015/09/06 Javascript
jqGrid中文文档之选项设置
2015/12/02 Javascript
使用BootStrap进行轮播图的制作
2017/01/06 Javascript
jQuery简单获取DIV和A标签元素位置的方法
2017/02/07 Javascript
详解angularJS动态生成的页面中ng-click无效解决办法
2017/06/19 Javascript
利用npm 安装删除模块的方法
2018/05/15 Javascript
Vue项目中添加锁屏功能实现思路
2018/06/29 Javascript
JS实现的A*寻路算法详解
2018/12/14 Javascript
vue 项目中当访问路由不存在的时候默认访问404页面操作
2020/08/31 Javascript
vue中是怎样监听数组变化的
2020/10/24 Javascript
vue下拉刷新组件的开发及slot的使用详解
2020/12/23 Vue.js
[53:03]Optic vs TNC 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
python条件变量之生产者与消费者操作实例分析
2017/03/22 Python
Python虚拟环境virtualenv的安装与使用详解
2017/05/28 Python
利用django-suit模板添加自定义的菜单、页面及设置访问权限
2018/07/13 Python
TensorFlow Session使用的两种方法小结
2018/07/30 Python
Python环境Pillow( PIL )图像处理工具使用解析
2019/09/12 Python
html5 音乐播放器 audio 标签使用概述
2013/07/15 HTML / CSS
数学专业推荐信范文
2013/11/21 职场文书
继电保护工岗位职责
2014/01/05 职场文书
玲玲的画教学反思
2014/02/04 职场文书
超市创意活动方案
2014/08/15 职场文书
教师个人总结范文
2015/02/11 职场文书
大学生军训感言
2015/08/01 职场文书
2016年教师党员承诺书范文
2016/03/24 职场文书
SpringBoot整合RabbitMQ的5种模式实战
2021/08/02 Java/Android