FrankenPHP经典模式无需Octane即可运行Laravel,仅需public/index.php入口,以每请求重启方式提供HTTPS、HTTP/3等能力;Worker模式则必须安装Octane并执行octane:install,满足无状态要求才能启用常驻内存性能提升。

不需要。FrankenPHP 本身是独立的 PHP 应用服务器,Laravel 项目不装 Octane 也能直接跑起来——只是走的是「经典模式」(即每个请求启动一次 PHP 生命周期),性能和传统 PHP-FPM 接近。
FrankenPHP 经典模式:不依赖 Octane 就能启动
FrankenPHP 自带 HTTP 服务和嵌入式 PHP 运行时,只要 Laravel 的 public/index.php 入口存在,它就能处理请求。你甚至可以不用 Laravel 的 Artisan 命令,直接用 FrankenPHP 二进制跑:
- 下载官方 FrankenPHP 二进制(如
frankenphp_1.2.0_linux_amd64.tar.gz) - 解压后执行:
./frankenphp serve --worker=public/index.php - 此时它就以单进程、无常驻、每请求重启的方式运行 Laravel —— 和 PHP 内置服务器类似,但支持 HTTPS、HTTP/3、静态文件等
这种模式下,composer require laravel/octane 完全不是必需的,php artisan octane:install 也不用执行。
Octane + FrankenPHP Worker 模式:才需要安装和配置
只有当你想启用「常驻内存、复用应用实例」带来的性能提升(比如 TTFB 从 150ms 降到 20ms),才必须引入 Octane 并开启 Worker 模式。这时关键动作包括:
立即学习“PHP免费学习笔记(深入)”;
- 执行
composer require laravel/octane - 必须运行
php artisan octane:install --server=frankenphp(这一步生成vendor/bin/frankenphp-worker.php并修改server.php) - 启动命令变成
php artisan octane:start,它会调用frankenphp-worker.php启动常驻 worker 进程 - 代码需满足无状态要求:避免依赖
$_SERVER静态值、不能用全局静态变量存请求数据、队列必须独立进程运行
漏掉 octane:install 或权限不对(比如 vendor/bin/frankenphp-worker.php 不可执行),就会静默退化回经典模式,终端也不会报错,只显示普通 HTTP 服务日志。
怎么确认当前是不是 Worker 模式?
启动后看终端第一行输出:
- 出现
Starting FrankenPHP Server→ 是经典模式(没走 Octane) - 出现
Starting FrankenPHP Worker Server→ 才是真正启用了 Octane 的常驻模式
如果看到前者却以为开了高性能,大概率是 octane:install 没执行,或 config/octane.php 里 'server' 键写成了 'frankenphp '(末尾空格)这类低级拼写错误——Octane 不校验字符串合法性,只会 fallback。
真正容易被忽略的是:FrankenPHP 的「经典模式」已经比 PHP-FPM 简化很多(单二进制、HTTPS 自动、无需 Nginx),但它的性能上限就是传统模型;而 Worker 模式看似一步之遥,实则对代码状态管理、会话驱动(SESSION_DRIVER 必须设为 redis 或 database)、日志写入方式都有硬性约束,不是装上就完事。



















