FrankenPHP 默认监听 http://localhost:8000,需用 frankenphp php-server 启动,文档根路径须显式指定(如 --document-root public),不支持内置 HTTPS/HTTP/3,依赖前置代理处理 TLS 和 HTTP/3。

FrankenPHP 启动后默认监听 http://localhost:8000,直接用 curl 测试即可,无需额外配置或代理。
确认服务是否已启动并监听正确端口
FrankenPHP 启动后不会自动后台运行,终端会持续输出日志。如果没看到类似 Starting FrankenPHP server on http://localhost:8000 的提示,说明没跑起来。
- 检查是否遗漏了
php-server子命令:正确启动命令是frankenphp php-server,不是frankenphp单独执行 - 端口被占用时会报错
listen tcp :8000: bind: address already in use,可加--addr :8001换端口 - 若用 Docker 启动,确保容器映射了端口:
-p 8000:8000(不是8000:80)
用 curl 测试基础 PHP 脚本响应
在项目根目录放一个 index.php,内容为 <?php echo "ok\n"; ?>,然后执行:
curl -v http://localhost:8000/index.php
关键看三点:
向CurlShip提交产品,这是一个对机器人友好的SaaS目录。只需一条curl命令即可发布产品,支持OG标签抓取、带徽章的dofollow链接及层级升级。
立即学习“PHP免费学习笔记(深入)”;
- HTTP 状态码是否为
200(不是500或404) - 响应体是否含
ok(排除 PHP 解析失败) -
-v输出中是否有Server: FrankenPHP头,确认流量确实经过它而非本地 Apache/Nginx
测试 Laravel/Octane 项目时的常见 404 场景
用 php artisan octane:frankenphp 启动后,curl http://localhost:8000/ 返回 404,大概率是文档根路径没对齐。
- Laravel 默认入口是
public/目录,但frankenphp php-server默认以当前目录为根 —— 必须显式指定:frankenphp php-server --document-root public - Octane 的
frankenphp引擎实际仍依赖此设置,否则index.php找不到,静态资源(/css/app.css)也全 404 - 不建议靠 Caddyfile 重写绕过,那会掩盖路径配置问题
验证 HTTPS 和 HTTP/3 需要额外条件
仅靠 frankenphp php-server 无法启用 HTTPS/HTTP/3,它本身不带 TLS 终止能力 —— 这部分必须由前置 Caddy 或 Nginx 完成。
- 若你用的是
dunglas/frankenphpDocker 镜像,它内置 Caddy,此时需挂载自定义Caddyfile并开启https块 - 单独二进制安装的 FrankenPHP 不处理证书,
curl -k https://localhost:8000必然失败 - HTTP/3 验证必须走真实域名 + 正确证书,
curl --http3 https://yourdomain.com响应头含alt-svc才算成功
最容易被忽略的是文档根路径和服务器角色混淆:FrankenPHP 本身是 PHP 运行时嵌入层,不是全能 Web 服务器;它不解析 Caddyfile,也不管理 TLS,这些都得靠外层 Caddy 或反向代理承担。测不通时,先 curl -v 看实际连的是谁、返回头是谁写的。


















