frankenphp 完全兼容 thinkphp 6 和 8,支持普通模式(无需改代码)和高性能 worker 模式;前者直接运行 public/index.php,后者通过替换入口脚本并启用 caddy 的 worker 配置提升 qps 2–3 倍,需确保 runtime 可写、扩展齐全、日志排查优先。

可以运行,FrankenPHP 完全兼容 ThinkPHP 项目,包括 TP6 和 TP8。它不是“替代 PHP-FPM”,而是以更现代的方式执行 PHP —— 支持常驻内存(worker 模式),能显著减少框架重复初始化开销,对 ThinkPHP 这类 MVC 框架尤其友好。
基础运行:普通模式(无需改代码)
只要 ThinkPHP 项目结构规范(public/ 为 Web 根目录,入口为 public/index.php),FrankenPHP 默认就能直接运行:
- 确保项目目录下有标准结构:
public/、app/、config/、runtime/、vendor/ - Web 根目录必须指向
public文件夹(Caddy 会自动识别index.php作为 PHP 入口) - 不需要重写规则或 .htaccess;FrankenPHP 内置路由机制可自动处理 PATH_INFO 或 QUERY_STRING 风格的 URL
- 数据库配置、缓存路径等保持原样,
config/database.php等文件无需改动
高性能运行:启用 worker 模式(推荐)
ThinkPHP 在 worker 模式下可跳过每次请求的框架引导过程,性能提升明显(实测 QPS 可达传统 FPM 的 2–3 倍)。需两步操作:
- 将入口文件
public/index.php替换为 FrankenPHP 官方适配的 worker 启动脚本(TP6/TP8 均有对应模板) - 核心逻辑是用
frankenphp_handle_request()包裹$app->http->run(),并手动调用$response->send()和$app->http->end() - 在 Caddyfile 的
frankenphp块中启用 worker,例如:worker { file "public/worker.php" } - 确保
runtime/目录可读写(Linux 下建议chmod -R 755 runtime)
关键配置项(Caddyfile 示例)
一个典型生产环境 Caddyfile 片段如下:
-
https://your-domain.com—— 自动申请并续期 Let’s Encrypt 证书 -
root * /path/to/your-project/public—— 明确指定 public 为根目录 -
php_backend块可省略;FrankenPHP 默认接管所有.php请求 - 如需自定义 PHP 行为,可用
php_ini指令,例如:php_ini opcache.enable 1 - 静态资源(CSS/JS/IMG)由 Caddy 直接服务,无需走 PHP,天然高效
注意事项与排错提示
常见问题基本集中在权限、路径和扩展上:
- 运行前确认已启用必需 PHP 扩展:PDO、MBString、OpenSSL、CURL(FrankenPHP 镜像默认包含,但自定义构建时需检查)
- 若访问报 500 或空白页,优先查看
runtime/log/下的日志,而非 Web 服务器 error log - 开发阶段可临时开启
debug => true,但上线前务必关闭 - Docker 部署时,注意挂载路径是否正确映射到
/var/www/html或你设定的路径 - 不建议在 worker 模式下使用
exit()或die(),应统一用$app->http->end()终止请求
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











