FrankenPHP 快速入门
- 2025-07-13 21:54:00
- 丁国栋
- 原创 4
FrankenPHP 是一个新兴的、高性能的 PHP 应用运行时和服务器,为现代 PHP 应用提供更快的执行速度和更低的资源消耗。
FrankenPHP 是在 Caddy Web 服务器的基础上创建出来的一个专门为 PHP 打造的现代 Web 服务器,可以理解为 FrankenPHP = PHP 解释器 + Caddy
。
1. 核心特点
- 基于 Caddy 和 Go:利用 Caddy 服务器的模块化架构和 Go 语言的高并发能力,提供稳定的 HTTP/2 和 HTTP/3 支持。
- 集成 PHP 运行时:直接嵌入 PHP 解释器,减少传统 PHP-FPM 的进程管理开销。
- 高性能:通过预加载、OPcache 优化和更少的上下文切换,显著提升请求处理速度。
- 开发者友好:兼容现有 PHP 应用(如 ThinkPHP、Laravel、Symfony等),支持classic(与fpm相似)和 worker(常驻内存)两种运行方式,无需或者少量修改代码即可迁移。例如可以使用 frankenphp 来运行禅道项目管理软件。
官方称 workder 运行方式要明显快速于 classic 运行方式。
2. 与 PHP-FPM 的对比
特性 | FrankenPHP | PHP-FPM |
---|---|---|
架构 | 嵌入式 PHP + Go 协程 | 独立的 FastCGI 进程管理器 |
性能 | 更高吞吐量,更低延迟 | 依赖进程池配置 |
协议支持 | HTTP/1.1, HTTP/2, HTTP/3 | 通常仅 HTTP/1.1 |
部署复杂度 | 单二进制,简化部署 | 需配置 Nginx/Apache |
3. 使用场景
- API/微服务:高并发场景下响应更快。
- 传统应用加速:提升 WordPress、Shopify 等应用的性能。
- Serverless/边缘计算:轻量级设计适合云原生部署。
4. 如何尝试
- 安装:从 https://frankenphp.dev/ 下载二进制或 Docker 镜像。
二进制安装:
curl https://frankenphp.dev/install.sh | sh
mv frankenphp /usr/local/bin/
在php代码目录下可以直接运行 frankenphp php-server
就可以立即启动服务,而使用 frankenphp php-cli /path/to/your/script.php
可以直接执行 php 文件
-
示例命令:
docker run -v .:/app -p 80:80 dunglas/frankenphp
-
配置:通过
Caddyfile
定义路由和 PHP 脚本路径。
下面是一个基本的Caddyfile:
:80 {
root /app/public/www
encode zstd br gzip
php_server {
env PATH_INFO {http.matchers.file.remainder}
try_files {path} index.php/{path}
}
log {
output file /app/public/tmp/log/caddy.log
level DEBUG
}
}
如果期望将 Caddyfile 日志写入标准输出,则使用 output stdout
。
5. 注意事项
- 扩展兼容性:部分 PHP 扩展可能需要适配,具体可以查阅官方文档,例如 ioncube 加密扩展,有些扩展需要支持线程安全,例如 imap,但可以用其他库替换,例如 javanile/php-imap2, webklex/php-imap。
- 社区生态:工具链(如调试、监控)仍在完善中。
6. 其他参考
发表评论