返回文章列表
服务器

FrankenPHP 是什么?现代 PHP 应用服务器 FrankenPHP 快速入门

匿名
2025-11-19
1小时前
FrankenPHP 是什么?现代 PHP 应用服务器 FrankenPHP 快速入门

FrankenPHP 是一个新兴的、高性能的 PHP 应用运行时和服务器,为现代 PHP 应用提供更快的执行速度和更低的资源消耗。

FrankenPHP 是在 Caddy Web 服务器的基础上创建出来的一个专门为 PHP 打造的现代 Web 服务器,可以理解为FrankenPHP = PHP 解释器 + Caddy

核心特点

  • 基于 Caddy 和 Go:利用 Caddy 服务器的模块化架构和 Go 语言的高并发能力,提供稳定的 HTTP/2 和 HTTP/3 支持。
  • 集成 PHP 运行时:直接嵌入 PHP 解释器,减少传统 PHP-FPM 的进程管理开销。
  • 高性能:通过预加载、OPcache 优化和更少的上下文切换,显著提升请求处理速度。
  • 开发者友好:兼容现有 PHP 应用(如 ThinkPHP、Laravel、Symfony等),支持classic(与fpm相似)和worker(常驻内存)两种运行方式,无需或者少量修改代码即可迁移。例如可以使用 frankenphp 来运行禅道项目管理软件。

与 PHP-FPM的对比


特性FrankenPHPPHP-FPM
架构嵌入式 PHP + Go 协程独立的 FastCGI 进程管理器
性能更高吞吐量,更低延迟依赖进程池配置
协议支持HTTP/1.1, HTTP/2, HTTP/3通常仅 HTTP/1.1
部署复杂度单二进制,简化部署需配置 Nginx/Apache

使用场景

  • API/微服务:高并发场景下响应更快。
  • 传统应用加速:提升 WordPress、Shopify 等应用的性能。
  • Serverless/边缘计算:轻量级设计适合云原生部署。

安装

从https://frankenphp.dev/下载二进制或 Docker 镜像。

二进制安装:

curl https://frankenphp.dev/install.sh | shmv frankenphp /usr/local/bin/

在php代码目录下可以直接运行frankenphp php-server就可以立即启动服务,而使用frankenphp php-cli /path/to/your/script.php可以直接执行 php 文件

这里使用Docker镜像

简单使用

新建文件index.php

<?php echo 'FrankenPHP 开源技术小栈!';

启动容器

docker run -v .:/app/public -p 80:80 -p 4433:443 dunglas/frankenphp

请求访问https://localhost:4433/

输出:FrankenPHP 开源技术小栈!

快速启动 ThinkPHP8

安装 ThinkPHP8

composer create-project topthink/think ThinkPHP8

这里的ThinkPHP8目录名你可以任意更改,这个目录就是我们后面会经常提到的应用根目录。

编写控制器Index

<?phpnamespace app\controller;use app\BaseController;class Index extends BaseController{    publicfunction index()    {        return'Hi ThinkPHP8';    }    publicfunction test()    {        return'test';    }    publicfunction hello($name = 'ThinkPHP8')    {        return'hello,' . $name;    }}

配置 Caddy 服务器

进入ThinkPHP8目录新建Caddyfile文件,定义路由和 PHP 脚本路径。

下面是一个基本的Caddyfile配置

:80 {    # 网站根目录(对应容器内的 /app/public)    root * /app/public    # 启用响应压缩(提升传输速度)    encode zstd br gzip    # PHP 服务配置(FrankenPHP 内置指令,替代传统 php_fastcgi)    php_server {        # 传递 PATH_INFO 环境变量(适配 PHP 框架路由)        env PATH_INFO {http.matchers.file.remainder}        # URL 重写规则(隐藏 index.php 入口)        try_files {path} index.php/{path}    }    # 日志配置    log {        # 日志输出到文件        output file /app/runtime/log/caddy.log        # 日志级别(调试模式)        level DEBUG    }}

启动容器

docker run -v .:/app -v ./Caddyfile:/etc/frankenphp/Caddyfile -p 80:80 dunglas/frankenphp

FrankenPHP 内置的 Caddy 服务器默认以 /app/public 为根目录.

日志输出/app/runtime/log/caddy.log 会对应 ThinkPHP8 的runtime/log目录

请求访问

访问http://127.0.0.1,输出Hi ThinkPHP8

访问特定路由http://127.0.0.1/index/hello?name=Tinywan,输出:hello,Tinywan


本文内容仅供参考,不构成任何专业建议。使用本文提供的信息时,请自行判断并承担相应风险。

分享文章
合作伙伴

本站所有广告均是第三方投放,详情请查询本站用户协议