选错 FrankenPHP 二进制 CPU 架构最直接表现为 exec format error 或 bad CPU type in executable,根本原因是系统架构与二进制不匹配;须用 uname -m 查宿主机架构(arm64/x86_64/aarch64),再严格对应下载 frankenphp-darwin-arm64、frankenphp-darwin-amd64、frankenphp-linux-arm64 或 frankenphp-linux-amd64,并用 file 命令验证。

选错 FrankenPHP 二进制的 CPU 架构,最直接的表现就是 exec format error 或 bad CPU type in executable——这不是权限问题,也不是路径错误,而是操作系统根本没法加载这个文件。关键就一点:你本地系统的 CPU 架构,必须和下载的二进制文件完全一致。
先确认你的系统架构
别猜,别看设备型号描述,直接运行命令查:
-
macOS(Apple Silicon 或 Intel):终端执行
uname -m
返回arm64→ 你用的是 M1/M2/M3 芯片,必须选frankenphp-darwin-arm64.tar.gz
返回x86_64→ 你用的是 Intel Mac,只能选frankenphp-darwin-amd64.tar.gz -
Linux(包括云服务器、树莓派、Docker 容器):同样运行
uname -m
返回aarch64(等同于 arm64)→ 下载frankenphp-linux-arm64.tar.gz
返回x86_64→ 下载frankenphp-linux-amd64.tar.gz -
Docker 镜像场景:运行
docker inspect dunglas/frankenphp | grep Architecture,看输出是arm64还是amd64,再对应拉取带-arm64或-amd64后缀的镜像 tag
下载时盯紧文件名后缀
FrankenPHP GitHub Releases 页面每个版本都提供多架构包,命名规则统一且明确:
-
frankenphp-darwin-arm64.tar.gz→ Apple Silicon(M 系列芯片)Mac -
frankenphp-darwin-amd64.tar.gz→ Intel Mac -
frankenphp-linux-arm64.tar.gz→ ARM64 Linux(AWS Graviton、阿里云倚天、树莓派 4/5 等) -
frankenphp-linux-amd64.tar.gz→ 标准 x86_64 服务器(绝大多数传统云主机、物理机)
注意:arm64 和 aarch64 是同一架构在不同系统中的叫法,不要被名称差异误导;armv7l 或 armv8l 是 32 位 ARM,FrankenPHP 不支持。
立即学习“PHP免费学习笔记(深入)”;
验证下载的文件是否真的匹配
解压后,用 file 命令检查二进制本身:
-
file frankenphp输出含aarch64→ 是 ARM64 版本 - 输出含
x86-64或AMD64→ 是 x86_64 版本 - 输出和
uname -m结果不一致,说明下错了,立刻换包
这个步骤不能跳过。有些用户从第三方镜像或旧文档链接下载了已停更的“通用包”(fat binary),FrankenPHP 自 v1.0.0 起就不再提供这类包,所有发布版都是单架构。
避开常见踩坑点
-
Homebrew 默认可能拉错:M1/M2 用户用
brew install frankenphp有时会因源配置问题装上 amd64 版,建议改用brew install --build-from-source frankenphp或直接下载二进制 -
别信自动脚本:
curl https://frankenphp.dev/install.sh | sh默认只拉 amd64,Apple Silicon 用户必须手动拼 URL,例如:curl -L -o frankenphp https://github.com/dunglas/frankenphp/releases/download/v1.2.0/frankenphp-darwin-arm64 -
别靠 PHP 自身判断:
php -v或phpinfo()显示的是当前 PHP 解释器的平台,和 FrankenPHP 主程序的架构无关——它是个独立 Go 二进制,只看你下载的那个文件



















