php教程

超轻量级php框架startmvc

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

更新时间:2020-03-11 11:33:22 作者:startmvc
使用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 读取文件