欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PHP實現(xiàn)linux命令tail -f

 更新時間:2016年02月22日 11:37:15   作者:奔跑的Man  
tail 命令從指定點開始將文件寫到標(biāo)準(zhǔn)輸出.使用tail命令的-f選項可以方便的查閱正在改變的日志文件,tail -f filename會把filename里最尾部的內(nèi)容顯示在屏幕上,并且不但刷新,使你看到最新的文件內(nèi)容.接下來通過本文給大家介紹PHP實現(xiàn)linux命令tail -f,需要的朋友參考下

tail 命令從指定點開始將文件寫到標(biāo)準(zhǔn)輸出.使用tail命令的-f選項可以方便的查閱正在改變的日志文件,tail -f filename會把filename里最尾部的內(nèi)容顯示在屏幕上,并且不但刷新,使你看到最新的文件內(nèi)容.

1.命令格式;

tail[必要參數(shù)][選擇參數(shù)][文件]

2.命令功能:

用于顯示指定文件末尾內(nèi)容,不指定文件時,作為輸入信息進(jìn)行處理。常用查看日志文件。

3.命令參數(shù):

-f 循環(huán)讀取

-q 不顯示處理信息

-v 顯示詳細(xì)的處理信息

-c<數(shù)目> 顯示的字節(jié)數(shù)

-n<行數(shù)> 顯示行數(shù)

--pid=PID 與-f合用,表示在進(jìn)程ID,PID死掉之后結(jié)束.

-q, --quiet, --silent 從不輸出給出文件名的首部

-s, --sleep-interval=S 與-f合用,表示在每次反復(fù)的間隔休眠S秒

今天突然想到之前有人問過我的一個問題,如何通過PHP實現(xiàn)linux中的命令tail -f,這里就來分析實現(xiàn)下。

這個想一想也挺簡單,通過一個循環(huán)檢測文件,看文件的大小是否有變化,如果有變化,輸出文件變化的部分,當(dāng)然了這里面會有好多的細(xì)節(jié),這里具體分析下。

如果初始文件太大或者改變內(nèi)容太多

這個時候一下輸出好多內(nèi)容可能看不清,因此我這里設(shè)置了一個閾值8192,當(dāng)內(nèi)容長度超過這個閾值的時候,只輸出最后面的8192個字節(jié),這樣就不會出現(xiàn)大面積的刷新導(dǎo)致看不清的問題。

如何檢測文件大小的變化

這個問題是這個程序的核心,能不能成功,性能的好壞就靠這部分了。

我在這里的實現(xiàn)是下面這樣:

•打開文件句柄$fp,這里要注意,這里的文件句柄全程需中只打開一次關(guān)閉一次,因此要將他放在循環(huán)的外面。
•初始化當(dāng)前文件大小file_size和file_size_new都為0。 •循環(huán)里面更新file_size_new文件大小,這里要注意,php中獲取文件大小之前一定要運(yùn)行函數(shù)clearstatcache(),清除文件狀態(tài)緩存,否則獲取文件大小可能會有偏差。

•計算add_size = file_size_new - file_size,看文件大小是否有變化,如果有變化,將文件指針移動到指定位置,然后輸出新加的內(nèi)容,更新file_size值為new_file_size。
•usleep(50000),睡眠1/20秒。

代碼實現(xiàn)

#!/usr/bin/env php 
<?php
if(2 != count($argv)){
fwrite(
STDERR,
"調(diào)用格式錯誤!使用格式 ./tail filename".PHP_EOL
); 
return 1;
}
$file_name = $argv[1];
define("MAX_SHOW", 8192);
$file_size = 0;
$file_size_new = 0;
$add_size = 0;
$ignore_size = 0;
$fp = fopen($file_name, "r");
while(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);
} 
fwrite(
STDOUT,
fread($fp, $add_size)
); 
$file_size = $file_size_new;
}
usleep(50000);
}
fclose($fp);

代碼實現(xiàn)這里第一行的#!/usr/bin/env php 是告訴可執(zhí)行文件,可執(zhí)行文件php在系統(tǒng)PATH中查找,這樣的好處就是移植性好。

下面是結(jié)果

下文給大家介紹如何實現(xiàn)Linux下高亮關(guān)鍵字的tail -f功能

公司內(nèi)部一哥們發(fā)布到郵件列表中的一個小tip,挺有意思,屬于程序員的“奇淫技巧”類吧,值得記錄一下。
如果你在linux下工作,那用tail -f跟蹤一個日志文件的輸出內(nèi)容應(yīng)該是家常便飯了。
但是,有時你更關(guān)心的是一些敏感字詞,希望能夠在動態(tài)跟蹤的同時,把這些字詞高亮出來,比如日志中的ERROR關(guān)鍵字。
那么,一種思路就是把你tail輸出的東西再做一次包裝處理,這個很符合linux管道處理的思想。以高亮Log中的ERROR為例,你可以這樣:

Shell代碼

tail -f xxx.log | perl -pe 's/(ERROR)/\e[1;31m$1\e[0m/g' 

其中,xxx.log是你要跟蹤的文件。這里假設(shè)了你的Linux的PATH中有perl。perl在這里干的事情,就是通過命令行的方式進(jìn)行動態(tài)的替換ERROR字符串的操作,替換過程中,主要使用了Linux的console_codes的語法結(jié)構(gòu)。(具體關(guān)于console_codes的細(xì)節(jié),可以通過man console_codes進(jìn)行了解)這里,\e主要進(jìn)行轉(zhuǎn)移說明。
如果你手頭有server log之類的日志,試試上面的命令,是不是把ERROR全部標(biāo)紅了。
利用這個原理,你完全可以按照你所需要的顏色高亮你感興趣的輸出,具體的顏色說明,可以在man console_codes中查到。
另外,less本身也支持類似于tail -f的操作,就是在你用less打開一個文件之后,按住SHIFT+F鍵,這樣就直接進(jìn)入follow的模式了。看上去跟tail -f效果是一致的。利用這點,你想達(dá)到高亮的tail -f的效果,就攏共分為以下3步了:

less xxx.log
中/${key_work}的方式搜索你要高亮的關(guān)鍵字。(即使目前文件中沒有也沒關(guān)系)
SHIFT+F,進(jìn)入follow模式

相關(guān)文章

  • php實現(xiàn)評論回復(fù)刪除功能

    php實現(xiàn)評論回復(fù)刪除功能

    這篇文章主要為大家詳細(xì)介紹了php實現(xiàn)評論回復(fù)刪除功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • PHP SPL標(biāo)準(zhǔn)庫之文件操作(SplFileInfo和SplFileObject)實例

    PHP SPL標(biāo)準(zhǔn)庫之文件操作(SplFileInfo和SplFileObject)實例

    這篇文章主要介紹了PHP SPL標(biāo)準(zhǔn)庫之文件操作(SplFileInfo和SplFileObject)實例,本文講解SplFileInfo用來獲取文件詳細(xì)信息、SplFileObject遍歷、查找指定行、寫入csv文件等內(nèi)容,需要的朋友可以參考下
    2015-05-05
  • phpMyAdmin無法登陸的解決方法

    phpMyAdmin無法登陸的解決方法

    這篇文章主要為大家詳細(xì)介紹了PhpMyAdmin無法登陸的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • ubuntu12.04使用c編寫php擴(kuò)展模塊教程分享

    ubuntu12.04使用c編寫php擴(kuò)展模塊教程分享

    php語言自帶了很多的擴(kuò)展模塊,諸如mbstring、gd、pdo等等。有時為了提高效率,需要用C實現(xiàn)其中的一些功能,就可以自行編寫php的擴(kuò)展模塊
    2013-12-12
  • CI框架中集成CKEditor編輯器的教程

    CI框架中集成CKEditor編輯器的教程

    CKEditor是在很多開發(fā)過程中都會用到的一個富文本編輯器,那么如何在CI框架中使用它呢?這里介紹了在CI下使用CKEditor的方法,版本比較低,是在CI 1.7.3下使用fckeditor 2.6.6。供大家參考。
    2014-06-06
  • PHP安裝擴(kuò)展mcrypt以及相關(guān)依賴項深入講解

    PHP安裝擴(kuò)展mcrypt以及相關(guān)依賴項深入講解

    這篇文章主要介紹了PHP安裝擴(kuò)展mcrypt以及相關(guān)依賴項深入講解,步驟講解的很清晰,有需要的同學(xué)可以研究下
    2021-03-03
  • WordPress中對訪客評論功能的一些優(yōu)化方法

    WordPress中對訪客評論功能的一些優(yōu)化方法

    這篇文章主要介紹了WordPress中對訪客評論功能的一些優(yōu)化,包括顯示評論上的歡迎信息等功能,需要的朋友可以參考下
    2015-11-11
  • 利用PHP將圖片轉(zhuǎn)換成base64編碼的實現(xiàn)方法

    利用PHP將圖片轉(zhuǎn)換成base64編碼的實現(xiàn)方法

    相信大家都知道Base64是網(wǎng)絡(luò)上最常見的用于傳輸8Bit字節(jié)代碼的編碼方式之一,如果對此不清楚的可以查看RFC2045~RFC2049,上面有MIME的詳細(xì)規(guī)范。這篇文章我們分享一個PHP將圖片轉(zhuǎn)換為base64編碼格式的方法,有需要的朋友們可以參考借鑒。
    2016-09-09
  • ThinkPHP部署Workerman的成功使用示例

    ThinkPHP部署Workerman的成功使用示例

    本文介紹thinkphp中關(guān)于composer集成workerman的方法,并解決了安裝過程 中遇到的錯誤,實現(xiàn)了和woerkman進(jìn)行握手和通信的demo。用戶可以在此基礎(chǔ)上按自己的邏輯實現(xiàn)一個聊天系統(tǒng)或者客服系統(tǒng)。
    2023-06-06
  • TP5 基于bootstrap實現(xiàn)多圖上傳插件

    TP5 基于bootstrap實現(xiàn)多圖上傳插件

    這篇文章主要介紹了TP5 基于bootstrap實現(xiàn)多圖上傳插件,需要的朋友可以參考下
    2018-07-07

最新評論