linux檔案資料夾遞歸監控
linux檔案資料夾遞歸監控
開發了一個規範的php composer套件,使用的時候直接require即可。
實作
php版本的實作沿用了shell版本的思想,透過管道指令傳遞shell指令的結果,然後對結果做各種處理,達到我們監控檔案的目的。
為了完成這個功能,首先要實作一個php版本的管道指令,這裡我對resource popen ( string $command , string $mode )做了封裝,可以透過很友善的處理指令的回傳值。
完成了上面的模組,接下來就是具體的實現了,實現這裡有多重友好的方式,添加多路徑遞歸監控、包含正則匹配、排除正則匹配。
pipe的開發
<?php/** * php对对popen的封装,通过回调的方式模拟管道命令 * */namespace Aizuyan\Pipe;class Pipe{ /** * 要通过管道执行的命令 */ protected $command = ""; /** * 回调函数,将管道数据传递给该函数 */ protected $callback = null; /** * 数据之间的分隔符 */ protected $delimiter = "\n"; /** * 设置命令 * * @param cmd string 要运行的命令 */ public function setCmd($cmd) { $this->command = $cmd; return $this; } /** * 设置回调函数,处理管道输出的命令 */ public function setCallback(callable $cb) { $this->callback = $cb; return $this; } /** * 设置数据片段之间的分隔符 */ public function setDelimiter($delimiter) { $this->delimiter = $delimiter; return $this; } /** * 开始运行 */ public function run() { $fp = popen($this->command, "r"); if (false === $fp) { throw new \RuntimeException("popen execute command failed!"); } $item = ""; while (!feof($fp)) { $char = fgetc($fp); if ($this->delimiter == $char) { call_user_func($this->callback, $item); $item = ""; } else { $item .= $char; } } pclose($fp); } }
下面是測試程序
$test = new RitoyanPipePipe();
$test->setCmd("tail -f /root/t.txt ")->setCallback(function($item){
echo "取得內容:" . $item . "n";
})->setDelimiter("n")->run();
對tail -f / root/t.txt這個shell指令的回傳結果進行即時處理,setCallback(callable func)設定了回呼函數,func的參數是shell指令的標準輸出,setDelimiter($delimiter)設定了傳入回呼函數參數的分隔符,這樣就可以很容易、很任性的將輸出傳遞給回呼函數了。
inotify開發
這部分程式碼就不提出來了,主要就是依賴上面的Pipe然後對inotifywait -mrq --format '%w,%e,%f'指令的輸出做處理,正向逆向過濾,下面是Inotify的呼叫
<?php require "vendor/autoload.php"; $obj = new Aizuyan\Inotify\Inotify(); $obj->addExclude([ "/swp$/", "/swpx$/", "/~$/", "/\d$/", "/swx$/" ])->setCallback(function ($item){ echo $item["event"] . " 文件 " . $item["file"] . "\n"; })->addPaths("/datas/git/")->start();
這樣運作之後,到我們修改/datas/git目錄下的檔案的時候會輸出下面的內容,可以很方便的對修改檔案做客製化的處理
CREATE 文件 /datas/git/inotify/README.md MODIFY 文件 /datas/git/inotify/README.md MOVED_TO 文件 /datas/git/aizuyan/pinyin-1/README.md DELETE 文件 /datas/git/aizuyan/pinyin-1/LICENSE ......
inotify-tools安裝
整個功能依賴於一個linux軟體—— inotify-tools
centos安裝yum install inotify-tools,或者透過原始碼直接安裝(文件)嘗試在OS中安裝,發現失敗了~
如何使用
我已經將他發佈到了composer倉庫中,可以輕鬆安裝:
composer require aizuyan/inotify,之後就可以像上面的例子一樣使用了
另外這是開發的兩個組件的github地址:AizuyanPipePipe , AizuyanInotifyInotuyanInot

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

PHP客戶端URL(curl)擴展是開發人員的強大工具,可以與遠程服務器和REST API無縫交互。通過利用Libcurl(備受尊敬的多協議文件傳輸庫),PHP curl促進了有效的執行

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

文章討論了PHP 5.3中介紹的PHP中的晚期靜態結合(LSB),允許靜態方法的運行時間分辨率調用以更靈活的繼承。 LSB的實用應用和潛在的觸摸

使用PHP的cURL庫發送JSON數據在PHP開發中,經常需要與外部API進行交互,其中一種常見的方式是使用cURL庫發送POST�...

深入解讀ReactPHP的非阻塞特性ReactPHP的一段官方介紹引起了不少開發者的疑問:“ReactPHPisnon-blockingbydefault....
