php模拟tail -f 实时输出日志

时间:17-05-11 栏目:网站开发 作者:admin 评论:0 点击: 1,986 次

有时候我们需要实时的输出一些日志文件,LINUX下有一个tail命令非常 好用,但我们服务器不是linux或者没有权限时,可以使用以下脚本来实现:

<?php
/**
* php模拟tail -f file.log 实时输出日志
* 请先指定日志目录,调用方式:oblog.php?f=file.log
* 本代码在nginx服务器下可能不能正常工作
*
* @author Steven.liao<lxq73061@163.com>
* @modify_date 2017-05-11 16:04
* @link http://www.onebound.cn
*
*/
if(1 != count($_GET)){
   echo  "调用格式错误!使用格式 oblog.php?f=file.log".PHP_EOL;
   exit();
}
$dir = dirname(__FILE__).'/runtime/logs/';//定义日志保存的目录
$file_name      = $_GET['f'];//日志文件名
if(strpos($file_name,'..')!==false){//禁止访问上级目录
	echo 'Error!';
	exit();
}
$file_name  = $dir . $file_name;

define("MAX_SHOW", 8192);//每次最多输出多少字节


$file_size      = 0;
$file_size_new  = 0;
$add_size       = 0;
$ignore_size    = 0;

echo str_pad('',4096);
echo str_repeat(' ', 1024*256);
echo '<script>function gb(){ var h = document.documentElement.scrollHeight || document.body.scrollHeight; window.scrollTo(h+200,h+200);};setInterval("gb();",1000)</script>'; 

$fp = fopen($file_name, "r"); 
while($fp && 1){ 
clearstatcache(); 
$file_size_new = filesize($file_name); 
$add_size = $file_size_new - $file_size; 
if($add_size > 0){ 
if($add_size > MAX_SHOW){ 
$ignore_size = $add_size - MAX_SHOW; 
$add_size = MAX_SHOW; 
fseek($fp, $file_size + $ignore_size); 
} 
$new = fread($fp, $add_size); 
if($new){ 
echo nl2br($new); ob_flush();flush(); 


} 
$file_size = $file_size_new; 
} 
usleep(50000); 
} 
fclose($fp);
 ?>

效果如下:

效果图如下:

声明: 本文由( admin )原创编译,转载请保留链接: php模拟tail -f 实时输出日志

php模拟tail -f 实时输出日志:等您坐沙发呢!

发表评论


------====== 本站公告 ======------
联系信息:
lxq73061#qq.com qq:583964941
支付宝:https://me.alipay.com/lxq73061
相关插件程序等信息均会在站内发布,敬请关注。

读者排行