唯一有效的环境变量是frankenphp_worker_entrypoint,仅在php-server模式下生效,必须启动前注入绝对或相对路径指向可执行php入口文件,其他变量均无效。

FrankenPHP 1.4 中,唯一被官方识别并生效的 worker 模式环境变量是 FRANKENPHP_WORKER_ENTRYPOINT。它只在 php-server 模式下起作用(即通过 frankenphp php-server 启动时),不适用于 frankenphp-worker 命令行直接运行场景。
这个变量的作用很明确:告诉 FrankenPHP 用哪个 PHP 文件作为常驻 worker 的入口脚本。
✅ 正确配置方式
-
变量名必须是:
FRANKENPHP_WORKER_ENTRYPOINT - 值必须是路径字符串:支持绝对路径(推荐)或相对路径(不推荐)
-
路径需指向可执行的 PHP 入口文件,例如:
/app/public/worker.php/var/www/myapp/public/index.php
- 必须在进程启动前注入,不能运行中设置
Linux / Docker 示例:
# 直接运行(确保当前目录有 index.php) FRANKENPHP_WORKER_ENTRYPOINT=index.php ./frankenphp php-server # 推荐:绝对路径 + 指定端口 FRANKENPHP_WORKER_ENTRYPOINT=/app/public/worker.php \ ./frankenphp php-server --addr :8080
Docker Compose 示例:
environment: - FRANKENPHP_WORKER_ENTRYPOINT=/app/public/worker.php command: ["php-server", "--addr", ":8080"]
宝塔面板(btpanel):
进入站点设置 → 环境变量 → 添加:
- 变量名:
FRANKENPHP_WORKER_ENTRYPOINT - 变量值:
/www/wwwroot/myapp/public/worker.php
⚠️ 注意:宝塔里必须填绝对路径,且确保该文件真实存在、权限为
644、所属用户与 FrankenPHP 进程一致。
❌ 常见错误写法(全部无效)
-
FRANKENPHP_WORKER=1—— 这只是个标记,不指定脚本路径,不起 worker 模式 -
WORKER_SCRIPT=worker.php—— FrankenPHP 完全忽略此变量 -
FRANKENPHP_CONFIG="worker ./index.php"—— 这是 Caddy 配置模板语法,不是环境变量;单独设会报错或静默失效 -
--script worker.php—— 这是frankenphp-worker命令的参数,和环境变量无关,也不能混用
? 如何验证是否生效?
启动后查看日志,成功会输出类似:
Starting PHP worker pool with 4 workers Loaded worker script: /app/public/worker.php
或者在控制器里加一行:
echo "PID: " . getmypid() . ", Script: " . $_SERVER['SCRIPT_FILENAME'];
连续发两个请求,如果 PID 相同、SCRIPT_FILENAME 显示的是你设的 worker.php 路径,说明已进入常驻 worker 模式。
? 补充提醒
-
FRANKENPHP_WORKER_ENTRYPOINT不会自动创建worker.php,你需要自己准备——Symfony 6.3+、ThinkPHP 6/8、CodeIgniter 4 官方都提供了模板,WordPress 可直接用index.php(但建议加简单封装防状态泄漏) - 如果路径不存在、不可读、或语法错误,FrankenPHP 会静默退化为普通请求模式(每次请求都重初始化),不会报错,容易误判
- 在容器或 CI 环境中,建议用
ls -l $PATH和php -l $PATH做启动前校验
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











