monitorDir = realpath(ROOT_PATH . '/'); if (!extension_loaded('inotify')) { $notice .= "Failed(未安装inotify扩展)"; } else { $this->inotify(); $notice .= "Enabled"; } writeln($notice); } /** * 监控目录 */ public function inotify() { $this->inotifyFd = inotify_init(); stream_set_blocking($this->inotifyFd, 0); $dirIterator = new \RecursiveDirectoryIterator($this->monitorDir); $iterator = new \RecursiveIteratorIterator($dirIterator); $monitorFiles = []; foreach ($iterator as $file) { if (pathinfo($file, PATHINFO_EXTENSION) != 'php') { continue; } $wd = inotify_add_watch($this->inotifyFd, $file, IN_MODIFY); $monitorFiles[$wd] = $file; } swoole_event_add($this->inotifyFd, function ($inotifyFd) use ($monitorFiles) { $events = inotify_read($inotifyFd); if ($events) { foreach ($events as $ev) { $file = $monitorFiles[$ev['wd']]; writeln('RELOAD ' . $file . ' update'); unset($monitorFiles[$ev['wd']]); $wd = inotify_add_watch($inotifyFd, $file, IN_MODIFY); $monitorFiles[$wd] = $file; } $this->MSFServer->server->reload(); } }, null, SWOOLE_EVENT_READ); } }