首页 > 开发 > PHP > 正文

PHP 读取大文件并显示的简单实例(推荐)

2024-05-04 22:28:47
字体:
来源:转载
供稿:网友

使用PHP读取日志文件,当文件比较大的时候,会报内存不足,因此应该部分读取,读取指定的行数的数据

PHP代码:

<?phpclass 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>            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表