国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁(yè) php教程 PHP源碼 PHP實(shí)作linux命令tail -f

PHP實(shí)作linux命令tail -f

Nov 08, 2016 pm 01:52 PM

PHP實(shí)作linux指令tail -f

今天突然想到之前有人問過我的一個(gè)問題,如何透過PHP實(shí)作linux中的指令 tail -f ,這裡就來(lái)分析實(shí)作下。

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

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

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

如何偵測(cè)檔案大小的變化

這個(gè)問題是這個(gè)程式的核心,能不能成功,效能的好壞就靠這部分了。我在這裡的實(shí)現(xiàn)是下面這樣:

打開文件句柄 $fp ,這裡要注意,這裡的文件句柄全程需中只打開一次關(guān)閉一次,因此要將他放在循環(huán)的外面。

初始化目前檔案大小 file_size 和 file_size_new 都為0。

循環(huán)裡面更新 file_size_new 檔案大小,這裡要注意,php中取得檔案大小之前一定要執(zhí)行函數(shù) clearstatcache() ,清除檔案狀態(tài)緩存,否則取得檔案大小可能會(huì)有偏差。

計(jì)算 add_size = file_size_new - file_size ,看檔案大小是否有變化,如果有變化,將檔案指標(biāo)移到指定位置,然後輸出新加的內(nèi)容,更新 file_size 值為 new_file_size 。

usleep(50000),睡眠1/20秒。

程式碼實(shí)作

#!/usr/bin/env php 
<?php
if(2 != count($argv)){
    fwrite(
        STDERR,
        "調(diào)用格式錯(cuò)誤!使用格式 ./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);

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

2016-02-22 11:28:51改進(jìn)

查了PHP官方手冊(cè), fseek 函數(shù)這裡可以改進(jìn)改進(jìn),這個(gè)函數(shù)還接受第三個(gè)參數(shù),表示偏移指針的類型,默認(rèn)是 SEEK_SET ,從開始偏移,也可以設(shè)定為 SEEK_CUR ,表示從目前位置偏移,因此這裡改為 fseek($fp, $ignore_size, $ignore_size);

下面是結(jié)果

PHP實(shí)作linux命令tail -f

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁(yè)開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)