日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
php怎么實(shí)現(xiàn)linux命令

本文操作環(huán)境:linux5.9.8系統(tǒng),php7.1版,Dell G3電腦。

php怎么實(shí)現(xiàn)linux命令?

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

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

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

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

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

如何檢測(cè)文件大小的變化

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

  • 打開(kāi)文件句柄$fp,這里要注意,這里的文件句柄全程需中只打開(kāi)一次關(guān)閉一次,因此要將他放在循環(huán)的外面。
  • 初始化當(dāng)前文件大小file_sizefile_size_new都為0。
    • 循環(huán)里面更新file_size_new文件大小,這里要注意,php中獲取文件大小之前一定要運(yùn)行函數(shù)clearstatcache(),清除文件狀態(tài)緩存,否則獲取文件大小可能會(huì)有偏差。
    • 計(jì)算add_size = file_size_new - file_size,看文件大小是否有變化,如果有變化,將文件指針移動(dòng)到指定位置,然后輸出新加的內(nèi)容,更新file_size值為new_file_size。
    • usleep(50000),睡眠1/20秒。

代碼實(shí)現(xiàn)

#!/usr/bin/env php 
 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中查找,這樣的好處就是移植性好。

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

下面是結(jié)果


網(wǎng)頁(yè)名稱(chēng):php怎么實(shí)現(xiàn)linux命令
當(dāng)前URL:http://m.5511xx.com/article/cddsjgh.html