使用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] 读取大文件并显示的更多相关文章

  1. PHP如何快速读取大文件

    在PHP中,对于文件的读取时,最快捷的方式莫过于使用一些诸如file.file_get_contents之类的函数,简简单单的几行代码就能 很漂亮的完成我们所需要的功能.但当所操作的文件是一个比较大的 ...

  2. PHP读取大文件的几种方法介绍

    读取大文件一直是一个头痛的问题,我们像使用php开发读取小文件可以直接使用各种函数实现,但一到大文章就会发现常用的方法是无法正常使用或时间太长太卡了,下面我们就一起来看看关于php读取大文件问题解决办 ...

  3. php -- 读取大文件

    在PHP中,对于文件的读取时,最快捷的方式莫过于使用一些诸如file.file_get_contents之类的函数,简简单单的几行代码就能 很漂亮的完成我们所需要的功能.但当所操作的文件是一个比较大的 ...

  4. 【转】PHP如何快速读取大文件

    在PHP中,对于文件的读取时,最快捷的方式莫过于使用一些诸如file.file_get_contents之类的函数,简简单单的几行代码就能 很漂亮的完成我们所需要的功能.但当所操作的文件是一个比较大的 ...

  5. php中读取大文件实现方法详解

    php中读取大文件实现方法详解 来源:   时间:2013-09-05 19:27:01   阅读数:6186 分享到:0 [导读] 本文章来给各位同学介绍php中读取大文件实现方法详解吧,有需要了解 ...

  6. PHP几个快速读取大文件例子

    PHP几个快速读取大文件例子 感谢 把我给崩了 的投递 时间:2014-10-16 来源:三联 在PHP中,对于文件的读取时,最快捷的方式莫过于使用一些诸如file.file_get_contents ...

  7. java读取大文件

    1  多线程 2  java内存映射读取大文件

  8. php使用file函数、fseek函数读取大文件效率分析

    php读取大文件可以使用file函数和fseek函数,但是二者之间效率可能存在差异,本文章向大家介绍php file函数与fseek函数实现大文件读取效率对比分析,需要的朋友可以参考一下. 1. 直接 ...

  9. Java多线程读取大文件

    前言 今天是五一假期第一天,按理应该是快乐玩耍的日子,但是作为一个北漂到京师的开发人员,实在难想出去那玩耍.好玩的地方比较远,近处又感觉没意思.于是乎,闲着写篇文章,总结下昨天写的程序吧. 昨天下午朋 ...

随机推荐

  1. asihttprequest本机调试时正常,发布后闪退

    "Compile sources" -->"Build Phases" 找到ASIFormDataRequest.m和ASIHTTPRequest.m,修 ...

  2. Python初学者需要注意的问题

    一.注意你的Python版本 Python官方网站为http://www.python.org/,当前最新版本为3.4.0 alpha,稳定版本为3.3.2,在3.0版本时,Python的语法改动较大 ...

  3. 15个实用的CSS在线实例教程

    前端技术可以说是必须学习的一个技术,现在做网站都需要懂DIV.CSS,在国内很多企业招网页设计师都要求会写基本的前端代码,所以前端技术是 必须了解的,对网页设计师本身也有帮助,今天向大家推荐一些不错的 ...

  4. android手机出现sqlite3 not found的解决方法

    解决方法如下: 1.如果/system目录为不可读写的,需要挂载为读写: C:\Users\easteq>adb shell root@android:/ # mount -o remount, ...

  5. SPI总线通信电路设计

    数据带宽=(总线频率×数据位宽)÷8 B表示带宽,F表示存储器时钟频率,D表示存储器数据总线位数,则带宽为: B(峰值带宽)=F(时钟频率MHz)×D(总线位数bit)/8 例如,PC-100的SDR ...

  6. Marven笔记贴

    本篇只是作为自学Marven的笔记贴,基本上都是网上的各种资料的汇总,方便自己和需要的人,不用一个个去找浪费时间了. 什么是Marven You want to start with a projec ...

  7. 如何对excel进行列查重

    学习了excel函数:countif.表达式:COUNTIF(数据区域,条件),作用:对数据区域内符合条件单元格计数 具体应用 在“姓名”(列A)后插入一列(列B),在B2单元格输入公式“=IF(CO ...

  8. ES6 Promise 接口

    构造函数 new Promise(function(resolve, reject){}); 构造函数接受一个函数(executor)作为参数,该函数在返回 Promise 实例之前被调用.函数的两个 ...

  9. 代码演示用 .NET 4.5 (C# 5.0)自带的压缩类 ZipArchive 创建一个压缩文件

    代码如下: using System; using System.Collections.Generic; using System.IO; using System.IO.Compression; ...

  10. IIS限制ip访问

    1.禁止IP访问 http://jingyan.baidu.com/article/22fe7ced0462633002617f39.html 2.限制IP访问频率 http://q.cnblogs. ...