思想
首选确定我们要监听的文件夹, 之后遍历文件夹下的文件, 计算出所有文件的 md5 值, 把这些md5的字符串拼接起来。 之后, 我们创建一个进程, 每5秒钟, 重新计算一下, 所有文件的md5值。和之前的进行对比, 如果不一样,就说明文件改动过, 做出相应的重启服务的操作
代码
<?php
function getMd5file($path){
$md5old = '';
$files = glob($path."/*"); //这里可以用scandir glob 但是 scandir 返回的不带完整路径, 所有使用 glob
foreach ($files as $f){
//echo $f.PHP_EOL;
if($f == "." || $f == ".."){
continue;
}else if(is_dir($f)){
$md5old.=getMd5file($f);
}else if(is_file($f)){
$md5old.=md5_file($f)."++";
}
}
return $md5old;
}
$process = new Swoole\Process(function(){
$old = getMd5file(__DIR__); //得到目录开始的 md5值
while(true){
sleep(5); //做一个死循环, 每5秒运行一次
$new = getMd5file(__DIR__); //得到文件夹的md5值
if(strcmp($old,$new) != 0){ //对比两个文件的不同
$old = $new; //如果有不同, 把新的md5值 赋给旧的
echo "文件发生改变了, 重启"; //这里是伪代码。执行要操作的命令
}
}
});
$process->start();