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 相关文章推荐
输出控制类
Oct 09 PHP
MySQL相关说明
Jan 15 PHP
php 获取mysql数据库信息代码
Mar 12 PHP
php Xdebug 调试扩展的安装与使用.
Mar 13 PHP
PHP 处理TXT文件(打开/关闭/检查/读取)
May 13 PHP
分享8个最佳的代码片段在线测试网站
Jun 29 PHP
PHP简单实现文本计数器的方法
Apr 28 PHP
php性能分析之php-fpm慢执行日志slow log用法浅析
Oct 17 PHP
php 5.4 全新的代码复用Trait详解
Jan 05 PHP
php 人员权限管理(RBAC)实例(推荐)
May 24 PHP
PHP命名空间简单用法示例
Dec 28 PHP
PHP PDOStatement::columnCount讲解
Jan 30 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
千呼万唤始出来,DOTA2勇士令状不朽宝藏Ⅱ现已推出
2020/08/25 DOTA
php一行代码获取文件后缀名实例分析
2014/11/12 PHP
PHP PDO fetch 模式各种参数的输出结果一览
2015/01/07 PHP
PHP经典面试题集锦
2015/03/19 PHP
javascript 日历提醒系统( 兼容所有浏览器 )
2009/04/07 Javascript
js遍历td tr等html元素
2012/12/13 Javascript
jQuery动态显示和隐藏datagrid中的某一列的方法
2013/12/11 Javascript
jQuery中serializeArray()与serialize()的区别实例分析
2015/12/09 Javascript
jQuery+css实现的tab切换标签(兼容各浏览器)
2016/01/28 Javascript
谈一谈javascript闭包
2016/01/28 Javascript
JS原型、原型链深入理解
2016/02/27 Javascript
js自定义QQ菜单效果
2017/01/10 Javascript
js仿京东轮播效果 选项卡套选项卡使用
2017/01/12 Javascript
Jquery中attr与prop的区别详解
2017/05/27 jQuery
Angular将填入表单的数据渲染到表格的方法
2017/09/22 Javascript
一种angular的方法级的缓存注解(装饰器)
2018/03/13 Javascript
vue keep-alive请求数据的方法示例
2018/05/16 Javascript
Vue-router 中hash模式和history模式的区别
2018/07/24 Javascript
JS实现点击li标签弹出对应的索引功能【案例】
2019/02/18 Javascript
vue分页器组件编写方法详解
2019/06/28 Javascript
微信小程序实现吸顶特效
2020/01/08 Javascript
python模拟登录百度贴吧(百度贴吧登录)实例
2013/12/18 Python
详解python使用Nginx和uWSGI来运行Python应用
2018/01/09 Python
python学习入门细节知识点
2018/03/29 Python
解决PyCharm控制台输出乱码的问题
2019/01/16 Python
对python中词典的values值的修改或新增KEY详解
2019/01/20 Python
在django项目中导出数据到excel文件并实现下载的功能
2020/03/13 Python
Keras中 ImageDataGenerator函数的参数用法
2020/07/03 Python
python-jwt用户认证食用教学的实现方法
2021/01/19 Python
css3中less实现文字长阴影(long shadow)
2020/04/24 HTML / CSS
您的健身减肥和健康饮食专家:vitafy
2017/06/06 全球购物
政风行风建设责任书
2014/07/23 职场文书
纪念九一八事变演讲稿:忘记意味着背叛
2014/09/14 职场文书
2015年大学班长个人工作总结
2015/04/24 职场文书
java泛型通配符详解
2021/07/25 Java/Android
CentOS8.4安装Redis6.2.6的详细过程
2021/11/20 Redis