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

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

實(shí)現(xiàn)

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

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

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

pipe的開發(fā)

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