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

有时候我们需要实时的输出一些日志文件,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);
 ?>

效果可以自己打印

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值