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

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

新聞中心

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

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

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

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

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

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

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

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

如何檢測文件大小的變化

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

  • 打開文件句柄$fp,這里要注意,這里的文件句柄全程需中只打開一次關閉一次,因此要將他放在循環(huán)的外面。
  • 初始化當前文件大小file_sizefile_size_new都為0。
    • 循環(huán)里面更新file_size_new文件大小,這里要注意,php中獲取文件大小之前一定要運行函數(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 
 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中查找,這樣的好處就是移植性好。

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

下面是結果


網(wǎng)頁名稱:php怎么實現(xiàn)linux命令
標題來源:http://www.5511xx.com/article/cddsjgh.html