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

Rumah php教程 PHP源碼 PHP實(shí)現(xiàn)linux命令tail -f

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

Nov 08, 2016 pm 01:52 PM

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

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

這個(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)的外面。

初始化當(dāng)前文件大小 file_size 和 file_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 
<?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 ,表示從當(dāng)前位置偏移,因此這里改為 fseek($fp, $ignore_size, $ignore_size);

下面是結(jié)果

14561939311.gif

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial PHP
1502
276