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 相关文章推荐
利用 window_onload 实现select默认选择
Oct 09 PHP
其他功能
Oct 09 PHP
php下使用以下代码连接并测试
Apr 09 PHP
UCenter Home二次开发指南
May 28 PHP
PHP异常处理浅析
May 12 PHP
discuz图片顺序混乱解决方案
Jul 29 PHP
phplist及phpmailer(组合使用)通过gmail发送邮件的配置方法
Mar 30 PHP
PHP简单遍历对象示例
Sep 28 PHP
Paypal实现循环扣款(订阅)功能
Mar 23 PHP
PHP实现的分页类定义与用法示例
Jul 05 PHP
PHP编程实现微信企业向用户付款的方法示例
Jul 26 PHP
PHP date_default_timezone_set()设置时区操作实例分析
May 16 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
Views rows style模板重写代码
2011/05/16 PHP
在php中判断一个请求是ajax请求还是普通请求的方法
2011/06/28 PHP
PHP中isset()和unset()函数的用法小结
2014/03/11 PHP
PHP单例模式是什么 php实现单例模式的方法
2016/05/14 PHP
php单链表实现代码分享
2016/07/04 PHP
php使用自定义函数实现汉字分割替换功能示例
2017/01/30 PHP
php实现微信企业付款到个人零钱功能
2018/10/09 PHP
Linux基于php-fpm模式的lamp搭建phpmyadmin的方法
2018/10/25 PHP
神奇的7个jQuery 3D插件整理
2011/01/06 Javascript
JQuery中判断一个元素下面是否有内容或者有某个标签的判断代码
2012/02/02 Javascript
js中的数组Array定义与sort方法使用示例
2013/08/29 Javascript
浅析用prototype定义自己的方法
2013/11/14 Javascript
JS 数字转换研究总结
2013/12/26 Javascript
JavaScript获取网页支持表单字符集的方法
2015/04/02 Javascript
node.js中fs.stat与fs.fstat的区别详解
2017/06/01 Javascript
Vue动态生成el-checkbox点击无法赋值的解决方法
2019/02/21 Javascript
一文快速详解前端框架 Vue 最强大的功能
2019/05/21 Javascript
初学node.js中实现删除用户路由
2019/05/27 Javascript
JavaScript剩余操作符Rest Operator详解
2019/07/20 Javascript
详解使用JWT实现单点登录(完全跨域方案)
2019/08/02 Javascript
浅谈Vue中render中的h箭头函数
2019/11/07 Javascript
[02:51]DOTA2战队出征照拍摄花絮 TI3明星化身时尚男模
2013/07/22 DOTA
跟老齐学Python之从if开始语句的征程
2014/09/14 Python
在GitHub Pages上使用Pelican搭建博客的教程
2015/04/25 Python
python入门前的第一课 python怎样入门
2018/03/06 Python
利用python计算windows全盘文件md5值的脚本
2019/07/27 Python
CSS3实现的文本3D效果附图
2014/09/03 HTML / CSS
德国健康生活方式网上商店:Landkaufhaus Mayer
2019/03/12 全球购物
介绍一下EJB的分类及其各自的功能及应用
2016/08/23 面试题
市场部专员岗位职责
2013/11/30 职场文书
安全检查管理制度
2014/02/02 职场文书
学校安全工作汇报材料
2014/08/16 职场文书
校园会短篇的广播稿
2014/10/21 职场文书
初中思想品德教学反思
2016/02/24 职场文书
java高级用法JNA强大的Memory和Pointer
2022/04/19 Java/Android
Oracle中日期的使用方法实例
2022/07/07 Oracle