中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

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

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

竹溪網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)建站,竹溪網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為竹溪成百上千提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)營(yíng)銷網(wǎng)站建設(shè)要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的竹溪做網(wǎng)站的公司定做!

本文操作環(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_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 <?phpif(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,從開(kāi)始偏移,還可以設(shè)置為SEEK_CUR,表示從當(dāng)前位置偏移,因此這里改為fseek($fp, $ignore_size, $ignore_size);

下面是結(jié)果

推薦學(xué)習(xí):《PHP視頻教程》

網(wǎng)頁(yè)標(biāo)題:php怎么實(shí)現(xiàn)linux命令
轉(zhuǎn)載來(lái)源:http://m.rwnh.cn/article46/cpcdeg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、微信小程序域名注冊(cè)、虛擬主機(jī)營(yíng)銷型網(wǎng)站建設(shè)、品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化
延川县| 屏东市| 高清| 洛南县| 高密市| 新竹县| 甘孜县| 石阡县| 含山县| 遂溪县| 新田县| 封丘县| 玛多县| 江孜县| 汉中市| 高台县| 梅州市| 曲水县| 且末县| 石河子市| 大余县| 徐州市| 綦江县| 青浦区| 栾城县| 敖汉旗| 宜昌市| 平南县| 大兴区| 札达县| 凤冈县| 深泽县| 曲水县| 阜康市| 阜新市| 赤壁市| 宣汉县| 山西省| 梁山县| 日土县| 龙川县|