Workerman-文件监控-牛刀小试
今天学习了workerman , 初次体验了定时器的效果,结合文档。弄了个文件监控。
好了 废话不多说 直接上代码
1 use Workerman\Worker; 2 require_once __DIR__ . '/Workerman/Autoloader.php'; 3 $monitor_dir = realpath(__DIR__.'/..'); 4 $worker = new Worker(); 5 $worker->name = 'FileMonitor'; 6 $worker->reloadable = false; 7 $last_mtime = time(); 8 $worker->onWorkerStart = function ($task) { 9 global $monitor_dir; 10 //每隔2.5 秒 执行一次 11 $time_interval = 2.5; 12 \Workerman\Lib\Timer::add($time_interval,"check_files_change",array($monitor_dir)); 13 }; 14 Worker::runAll(); 15 16 /** 17 * 定时执行函数 18 */ 19 function check_files_change($monitor_dir) { 20 global $last_mtime; 21 22 // spl 迭代器 php > 5.5 以上 链接 http://php.net/manual/zh/class.recursivedirectoryiterator.php 23 $dir_iterator = new RecursiveDirectoryIterator($monitor_dir); 24 $iterator = new RecursiveIteratorIterator($dir_iterator); 25 foreach ($iterator as $file) { 26 // 只对 后缀为php 的文件监控 27 if(pathinfo($file, PATHINFO_EXTENSION) != 'php') { 28 continue; 29 } 30 31 // 当前时间和文件最后一次更新文件 比较 32 if($last_mtime < $file->getMTime()) { 33 echo $file." update and reload\n"; 34 //windows 必须屏蔽这行代码 不然报错 35 // posix_kill(posix_getppid(), SIGUSR1); 36 $last_mtime = $file->getMTime(); 37 break; 38 } 39 } 40 }
运行:在目录里面新建或添加文字