亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

php如何實現linux命令

發布時間:2021-12-08 11:32:10 來源:億速云 閱讀:111 作者:小新 欄目:編程語言

這篇文章主要為大家展示了“php如何實現linux命令”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“php如何實現linux命令”這篇文章吧。

php實現linux命令的方法:1、創建一個PHP示例文件;2、在第一行輸入“#!/usr/bin/env php”;3、通過“if(2 != count($argv)){...}”等代碼實現linux命令“tail -f”即可。

本文操作環境:linux5.9.8系統,PHP7.1版,Dell G3電腦。

PHP實現linux命令tail -f

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

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

如果初始文件太大或者改變內容太多

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

如何檢測文件大小的變化

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

  • 打開文件句柄$fp,這里要注意,這里的文件句柄全程需中只打開一次關閉一次,因此要將他放在循環的外面。

  • 初始化當前文件大小file_sizefile_size_new都為0。

    • 循環里面更新file_size_new文件大小,這里要注意,php中獲取文件大小之前一定要運行函數clearstatcache(),清除文件狀態緩存,否則獲取文件大小可能會有偏差。

    • 計算add_size = file_size_new - file_size,看文件大小是否有變化,如果有變化,將文件指針移動到指定位置,然后輸出新加的內容,更新file_size值為new_file_size

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

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

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

2016-02-22 11:28:51改進

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

下面是結果

php如何實現linux命令


以上是“php如何實現linux命令”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

西乌| 调兵山市| 延寿县| 安康市| 策勒县| 天祝| 历史| 阜宁县| 乌海市| 湟源县| 广安市| 贡嘎县| 广水市| 扶风县| 铅山县| 永善县| 衡水市| 清丰县| 绵竹市| 海城市| 东明县| 波密县| 鲜城| 蒙阴县| 广州市| 固安县| 长海县| 上蔡县| 大足县| 珠海市| 兴山县| 济南市| 海林市| 南皮县| 白河县| 昭平县| 九江县| 昌黎县| 泸西县| 曲阜市| 漠河县|