PHP 读取大文件并显示的简单实例(推荐)
更新时间:2016年08月12日 10:54:26 投稿:jingxian
下面小编就为大家带来一篇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 读取大文件并显示的简单实例(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
discuz免激活同步登入代码修改方法(discuz同步登录)
无需激活直接同步登入discuz,测试版本:discuz! x3,理论也支持2.5,大家测试再用吧2013-12-12thinkphp5.0整合phpsocketio完整攻略(绕坑)
这篇文章主要介绍了thinkphp5.0整合phpsocketio完整攻略(绕坑),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-10-10在phpstudy集成环境下的nginx服务器下配置url重写
这篇文章主要介绍了在phpstudy集成环境下的nginx服务器下配置url重写的教程,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下2019-12-12laravel自定义分页的实现案例offset()和limit()
今天小编就为大家分享一篇laravel自定义分页的实现案例offset()和limit(),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2019-10-10Zend Framework教程之前端控制器Zend_Controller_Front用法详解
这篇文章主要介绍了Zend Framework教程之前端控制器Zend_Controller_Front用法,详细分析了前端控制器Zend_Controller_Front的功能,使用方法与相关注意事项,需要的朋友可以参考下2016-03-03CodeIgniter框架数据库事务处理的设计缺陷和解决方案
这篇文章主要介绍了CodeIgniter框架数据库事务处理的设计缺陷和解决方案,也可以说是一个小BUG,使用CodeIgniter事务的朋友会遇到这个问题,需要的朋友可以参考下2014-07-07
最新评论