本文目录导读:

- 传统 PHP(PHP-FPM + Nginx/Apache)
- 常驻内存框架(Swoole / Workerman)
- 开发环境(本地调试)
- 终极方案:OpCache 热更新(生产环境推荐)
- 总结:选择哪种方案?
在 PHP 中,“热启动”通常指在不重启 Web 服务器(如 Nginx/Apache)或不中断当前服务的情况下,重新加载服务端代码,由于 PHP 本身的执行机制不同,热启动的实现方式差异很大,以下是针对不同场景的详细方案:
传统 PHP(PHP-FPM + Nginx/Apache)
这是最普遍的场景,代码修改后无需重启服务,因为 PHP 每次请求都会重新编译执行,但如果你需要“平滑重启” PHP-FPM(比如修改了 php.ini 或扩展配置),可以采用以下方式:
方案 A:平滑重载 PHP-FPM(不丢请求)
# 优雅重启(先处理完当前请求再退出) kill -USR2 $(cat /var/run/php-fpm.pid) # 或使用 systemd(推荐) systemctl reload php-fpm
原理:USR2 信号会让 PHP-FPM 重新加载配置文件,同时保留现有的 worker 进程处理完当前请求后才退出,等待新请求时使用新配置。
常驻内存框架(Swoole / Workerman)
这类框架常驻内存,代码修改后必须重启才能生效,但可做到不中断服务。
方案 B:Swoole 热重载(代码改动自动生效)
// 在 Swoole 服务中添加热重载逻辑
$server->on('WorkerStart', function ($server, $workerId) {
// 如果是自定义进程,可监听文件变化
if ($workerId === 0) {
swoole_timer_tick(2000, function () use ($server) {
$changed = swoole_last_error(); // 模拟检查文件变更
if (filemtime('app.php') > $server->lastUpdate) {
$server->reload(); // 平滑重启所有 Worker
$server->lastUpdate = time();
}
});
}
});
实战命令(手动触发热重载):
# 向 Swoole 主进程发送 SIGUSR1 信号 kill -USR1 $(cat swoole.pid)
方案 C:Workerman 热重启
# 优雅重启(等待当前请求处理完成后重启) php start.php reload
特点:立即生效,不会丢失正在处理的连接。
开发环境(本地调试)
开发时希望代码修改立即生效,无需手动重启:
方案 D:使用 php -S 内置服务器 + 自动重载
# 配合 watchexec(Linux/macOS) watchexec -e php "php -S localhost:8000" # 或使用 Laravel 开发服务器(自动刷新) php artisan serve
终极方案:OpCache 热更新(生产环境推荐)
大多数生产环境使用 OPcache 缓存编译后的 PHP 代码,修改代码后,需要让 OPcache 失效缓存:
方案 E:通过脚本触发 OPcache 刷新(无需重启)
// opcache_refresh.php
$status = opcache_get_status();
foreach ($status['scripts'] as $file => $info) {
if (str_contains($file, '/your_project/')) {
opcache_invalidate($file, true); // true = 强制失效
}
}
echo "OPcache 已刷新\n";
CLI 定时执行:
# 每次代码部署后执行 php /path/to/opcache_refresh.php
选择哪种方案?
| 场景 | 推荐方案 |
|---|---|
| 传统 PHP-FPM | kill -USR2 或 systemctl reload |
| Swoole | kill -USR1 或代码内集成文件监控 |
| Workerman | php start.php reload |
| 开发环境 | 监听文件自动重启(watchexec) |
| OPcache | opcache_invalidate() 定向清理 |
关键提示:
- 修改
php.ini必须重启 PHP-FPM(热重载无法加载 php.ini 变更)。 - 生产环境建议将热重载集成到 CI/CD 部署脚本,避免手工操作。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播