有時候我們需要實時的輸出一些日志檔案,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);
?>
效果如下:
效果圖如下: