天天看點

php實時日志,php模拟tail -f 實時輸出日志

有時候我們需要實時的輸出一些日志檔案,LINUX下有一個tail指令非常 好用,但我們伺服器不是linux或者沒有權限時,可以使用以下腳本來實作:

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

?>

效果如下:

效果圖如下:

php實時日志,php模拟tail -f 實時輸出日志