今年(2016)年初來到A公司了,剛入職的時候比較缺前端fe,就過來頂了三個月,這段時間學到了好多前端開發(fā)的知識,這些都是題外話了。期間接觸了一個很好用的前端自動化部署工具 —— fis,其中有個小功能特別好用,實時監(jiān)控文件,然后同步到服務端,大大提高了開發(fā)的效率。之后轉到后端,發(fā)現(xiàn)大家開發(fā)測試相同模塊的時候經(jīng)常會出現(xiàn)互相覆蓋的情況,要么就一個個的復制文件到服務器上,效率非常低下,之前為這個也開發(fā)過一個純shell版本的自動化監(jiān)控同步工具文件同步監(jiān)控工具后來發(fā)現(xiàn)純shell版本的使用體驗和擴展性能非常差,就開發(fā)了這篇文章所要介紹的php版本。

這次開發(fā)了一個規(guī)范的php composer包,使用的時候直接require即可。

實現(xiàn)

php版本的實現(xiàn)沿用了shell版本的思想,通過管道命令傳遞shell命令的結果,然后對結果做各種處理,達到我們監(jiān)控文件的目的。

為了完成這個功能,首先要實現(xiàn)一個php版本的管道命令,這里我對resource popen ( string $command , string $mode )做了封裝,可以通過很友好的處理命令的返回值。

完成了上面的模塊,接下來就是具體的實現(xiàn)了,實現(xiàn)這里有多重友好的方式,添加多路徑遞歸監(jiān)控、包含正則匹配、排除正則匹配。

pipe的開發(fā)

<?php/** * php對對popen的封裝,通過回調的方式模擬管道命令 * */namespace Aizuyan\Pipe;class Pipe{    /**     * 要通過管道執(zhí)行的命令     */
    protected $command = "";
    /**     * 回調函數(shù),將管道數(shù)據(jù)傳遞給該函數(shù)     */
    protected $callback = null;
    /**     * 數(shù)據(jù)之間的分隔符     */
    protected $delimiter = "\n";
    /**     * 設置命令     *     * @param cmd string&nb