
FrankenPHP 1.2 可以直接运行大多数传统 PHP-FPM 项目,无需重写代码,但需要调整部署方式和少量配置。核心在于:它不再依赖外部 FastCGI 进程,而是把 PHP 运行时嵌入 Go 服务器中,以常驻 Worker 模式执行——这意味着你得放弃 php-fpm.conf 和 Nginx 的 fastcgi_pass 配置,改用 FrankenPHP 自带的 HTTP 服务或搭配 Caddy。
确认项目兼容性:先看哪些能直接跑
绝大多数基于 Composer、使用标准 PSR-7/PSR-15 或纯函数式入口(如 index.php)的项目都可直接运行。重点检查以下三点:
- 不依赖
$_SERVER['FCGI_ROLE']或其他 FastCGI 特定环境变量(FrankenPHP 不模拟 FastCGI 协议,而是原生 HTTP) - 没有硬编码
php-fpm进程管理逻辑(如调用posix_kill管理子进程) - 数据库连接、缓存、日志等扩展已启用(FrankenPHP 使用系统 PHP 安装,需确保
pdo_mysql、redis、opcache等已编译并加载)
替换 Nginx+PHP-FPM:用 FrankenPHP 内置服务器启动
最简方式是用 FrankenPHP 自带的 HTTP 服务器替代整套 Nginx + PHP-FPM。假设你的项目根目录是 /var/www/myapp,且包含标准 public/index.php 入口:
- 确保已安装 FrankenPHP 1.2(推荐从 frankenphp.dev 下载预编译二进制)
- 在项目根目录下创建
frankenphp.yaml:
server:
http_address: ":8080"
tls:
enabled: false
<p>workers:</p>
- name: "app" script: "public/index.php" document_root: "public" env: APP_ENV: "production" APP_DEBUG: "false"
- 执行:
frankenphp run(自动读取当前目录的frankenphp.yaml) - 访问
http://localhost:8080即可,静态文件(CSS/JS/IMG)由 FrankenPHP 自动托管,无需额外配置
进阶:用 Caddy 替代 Nginx,更贴近生产习惯
如果你习惯用反向代理做 HTTPS、日志、压缩或路由分发,Caddy 是 FrankenPHP 官方推荐搭档,配置比 Nginx 更简洁:
- 安装 Caddy(支持
php插件的版本,或使用 Caddy 2.8+ 内置 FrankenPHP 支持) - 在 Caddyfile 中写:
example.com {
root * /var/www/myapp/public
php_backend localhost:8080
encode zstd gzip
file_server
}- 同时运行:
frankenphp run --server.http-address=localhost:8080(仅监听本地端口,不暴露公网) - Caddy 自动处理 TLS 终止、HTTP/3、静态资源缓存,FrankenPHP 专注执行 PHP
适配常见框架的细节处理
部分框架(如 Laravel、Symfony、ThinkPHP)默认依赖 SCRIPT_NAME 或路径重写,需微调:
-
Laravel:确保
public/.htaccess被忽略(FrankenPHP 不走 Apache),改用frankenphp.yaml的document_root指向public,并设置APP_URL=http://example.com -
Symfony:若用
index.php入口,确认$_SERVER['REQUEST_URI']正确;FrankenPHP 默认透传原始 URI,一般无需改动 -
WordPress:需开启
permalink的话,在frankenphp.yaml中添加rewrite: true并确保.htaccess规则已转为 Caddy 的try_files逻辑
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











