FrankenPHP 不支持多 PHP 版本切换,其二进制静态链接固定版本的 PHP 运行时;需通过下载对应 php8.2/php8.3 等标识的官方二进制、Docker 镜像或源码构建来指定版本。

FrankenPHP 本身不提供多 PHP 版本切换机制
FrankenPHP 的二进制文件是「静态链接」的,它把 PHP 运行时(包括 Zend 引擎、扩展、标准库)直接编译进自身,所以 frankenphp --version 显示的 PHP 版本,就是它内置的那个——你无法像 PHP-FPM 那样通过配置指向不同 php-fpm 二进制来切换版本。
想用特定 PHP 版本?得选对应 FrankenPHP 构建版本
官方发布的每个 FrankenPHP 二进制,都明确绑定一个 PHP 版本(例如 frankenphp-v1.2.0-php8.3)。你不能在安装后“升级 PHP”或“降级 PHP”,只能换整个 FrankenPHP 二进制。
- 查看可用版本:访问 GitHub Releases 页面,注意文件名中的
php8.2、php8.3等字样 - Linux/macOS 下手动下载时,别只下
frankenphp,要下带 PHP 版本标识的完整包,比如frankenphp_1.2.0_linux_amd64_php8.3.tar.gz - Docker 用户应拉取带标签的镜像:
dunglas/frankenphp:php8.3,而不是无版本后缀的latest(后者可能随时间变更) - Homebrew(macOS)目前只提供
php8.3绑定版,暂不支持 brew install frankenphp@8.2 这类多版本管理
自己构建 FrankenPHP 才能控制 PHP 版本
如果你必须用 PHP 8.1 或某个未发布组合,唯一办法是源码构建。这需要:
- 克隆
github.com/dunglas/frankenphp仓库 - 确认
.github/workflows/build.yml中指定的 PHP 源码分支(如php-src: php-8.1) - 本地安装 Go 1.22+、CMake、pkg-config 和 PHP 构建依赖(
libxml2-dev、zlib1g-dev等) - 执行
make build,生成带目标 PHP 版本的二进制
这个过程耗时且易出错,普通项目不建议走这条路;生产环境更推荐等官方发布对应版本。
立即学习“PHP免费学习笔记(深入)”;
误以为能用系统 PHP?别碰 PHP_INI_DIR 或 php.ini
FrankenPHP 启动时会忽略系统 php.ini 路径,也不读取 PHP_INI_SCAN_DIR。它只加载自己内置的配置(可通过 frankenphp php-cli -i 查看 Loaded Configuration File 行,通常显示为 (none) 或内建路径)。试图用 export PHP_INI_DIR=/etc/php/8.3/cli 干预,完全无效。
真正能调的只有运行时行为:比如通过 frankenphp php-cli -d memory_limit=512M script.php 临时覆盖 ini 设置,但这不改变 PHP 主版本。



















