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

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

/**

* php模拟tail -f file.log 实时输出日志

* 请先指定日志目录,调用方式:oblog.php?f=file.log

* 本代码在nginx服务器下可能不能正常工作

*

* @author Steven.liao

* @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 '';

$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);

?>

效果如下:

效果图如下:

dc02cf4325b7d803dd3310b8aaff427d.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值