Hyperf 开启热刷新 watch
·
Hyperf 开启热刷新 Watch
监听文件变化自动重启 Hyperf
前提条件
在使用此 watch 脚本前,请确保您的开发环境满足以下要求:
1. PHP 版本要求
- PHP 7.3 或更高版本(推荐 PHP 8.0+)
- 需要启用以下扩展:
pcntl:用于进程控制,这是脚本监听文件变化的核心依赖posix:用于进程信号处理sockets:Hyperf 框架运行所需
2. Hyperf 框架版本
- Hyperf 2.0 或更高版本(兼容 Hyperf 3.x)
- 确保项目已正确安装并配置
3. 操作系统兼容性
- Linux/macOS:完全支持(推荐开发环境)
- Windows:
- 需要 WSL(Windows Subsystem for Linux)环境
- 或使用 Docker 容器运行
- 原生 Windows 环境可能因信号处理差异存在兼容性问题
4. 文件系统权限
- 对项目根目录有读取和执行权限
- 对
runtime目录有写入权限(用于存储 PID 文件) - 对监听目录有读取权限
5. 环境检查命令
在安装前,可以运行以下命令检查环境是否满足要求:
# 检查 PHP 版本
php -v
# 检查必要扩展
php -m | grep -E "pcntl|posix|sockets"
# 检查 Hyperf 项目状态
php bin/hyperf.php
如果缺少必要扩展,请根据您的系统安装相应扩展:
# Ubuntu/Debian
sudo apt install php-pcntl php-posix php-sockets
# CentOS/RHEL
sudo yum install php-pcntl php-posix php-sockets
# macOS (Homebrew)
brew install php@8.2
6. 其他注意事项
- 确保终端支持 ANSI 颜色代码(用于控制台彩色输出)
- 建议在开发环境中使用,生产环境请勿启用文件监听
- 如果使用 Docker,请确保容器内已安装上述 PHP 扩展
提示:如果环境检查通过,即可继续下面的安装步骤。如有问题,请先解决环境依赖再继续。
安装
根目录下载
wget -O watch https://gitee.com/hanicc/hyperf-watch/raw/master/watch
启动监听
php watch
启动监听并删除代理类缓存(./runtime/container)
php watch -c
退出监听:
Control + C
默认配置(打开 watch 文件,可自行修改):
# PHP Bin File PHP 程序所在路径(默认自动获取)
const PHP_BIN_FILE = 'which php';
# Watch Dir 监听目录(默认监听脚本所在的根目录)
const WATCH_DIR = __DIR__ . '/';
# Watch Ext 监听扩展名(多个可用英文逗号分隔)
const WATCH_EXT = 'php,env';
# Exclude Dir 排除目录(不监听的目录,数组形式)
const EXCLUDE_DIR = ['vendor', 'runtime', 'public'];
# Entry Point File 入口文件
const ENTRY_POINT_FILE = __DIR__ . '/bin/hyperf.php';
# Start Command 启动命令
const START_COMMAND = [ENTRY_POINT_FILE, 'start'];
# PID File Path PID 文件路径
const PID_FILE_PATH = __DIR__ . '/runtime/hyperf.pid';
# Scan Interval 扫描间隔(毫秒,默认2000)
const SCAN_INTERVAL = 2000;
# Console Color 控制台颜色
const CONSOLE_COLOR_DEFAULT = "\033[0m";
const CONSOLE_COLOR_RED = "\033[0;31m";
const CONSOLE_COLOR_GREEN = "\033[0;32m";
const CONSOLE_COLOR_YELLOW = "\033[0;33m";
const CONSOLE_COLOR_BLUE = "\033[0;34m";
常见问题与排查
1. 监听不生效怎么办?
如果启动监听后,修改文件没有触发 Hyperf 重启,请按以下步骤排查:
-
检查监听目录和扩展名:
- 确认修改的文件在
WATCH_DIR指定的目录下 - 确认文件扩展名在
WATCH_EXT列表中(默认监听.php和.env文件)
- 确认修改的文件在
-
检查排除目录:
- 确保修改的文件不在
EXCLUDE_DIR排除的目录中(默认排除vendor、runtime、public)
- 确保修改的文件不在
-
检查文件权限:
- 确保 watch 脚本有读取监听目录的权限
- 确保 PHP 进程有执行权限
-
检查扫描间隔:
- 默认扫描间隔为 2000 毫秒(2 秒),如果修改后立即查看可能还未触发
- 可在配置中调整
SCAN_INTERVAL值,但不宜设置过小以免消耗过多系统资源
-
查看控制台输出:
- 启动监听时添加
-v参数查看详细日志:php watch -v - 观察是否有文件变更检测的日志输出
- 启动监听时添加
2. 如何修改监听目录或扩展名?
watch 脚本的配置存储在脚本文件本身,需要直接编辑 watch 文件进行修改:
-
打开配置文件:
vim watch或使用其他文本编辑器打开
-
修改监听目录:
找到const WATCH_DIR = __DIR__ . '/';这一行,可以修改为:const WATCH_DIR = __DIR__ . '/app/'; // 只监听 app 目录或
const WATCH_DIR = '/path/to/your/project/'; // 指定绝对路径 -
修改监听扩展名:
找到const WATCH_EXT = 'php,env';这一行,可以修改为:const WATCH_EXT = 'php,env,json,yaml'; // 增加 json 和 yaml 文件或
const WATCH_EXT = 'php'; // 只监听 php 文件 -
保存并重启监听:
- 按
Control + C退出当前监听 - 重新执行
php watch启动监听 - 修改会立即生效,无需重新下载脚本
- 按
-
其他可配置项:
EXCLUDE_DIR: 排除不需要监听的目录SCAN_INTERVAL: 调整文件扫描频率(单位:毫秒)PHP_BIN_FILE: 指定 PHP 可执行文件路径
注意:修改配置后需要重启监听进程才能生效。如果修改后出现问题,可以重新下载原始脚本恢复默认配置。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)