php模拟tail -f 实时输出日志
有时候我们需要实时的输出一些日志文件,LINUX下有一个tail命令非常 好用,但我们服务器不是linux或者没有权限时,可以使用以下脚本来实现:
* php模拟tail -f file.log 实时输出日志 * 请先指定日志目录,调用方式:oblog.php?f=file.log * 本代码在nginx服务器下可能不能正常工作 * @author * @modify _date 2017-05-11 16:04 * @link http://www. 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 );效果可以自己 打印