apple silicon(m1/m2/m3)mac必须用frankenphp-darwin-arm64.tar.gz,intel mac只能用frankenphp-darwin-amd64.tar.gz;二者完全不兼容,下错将触发exec format error或bad cpu type in executable。

frankenphp-darwin-arm64.tar.gz 和 frankenphp-darwin-amd64.tar.gz 到底该下哪个
Apple Silicon(M1/M2/M3)Mac 必须用 frankenphp-darwin-arm64.tar.gz;Intel Mac 只能用 frankenphp-darwin-amd64.tar.gz。两者完全不兼容,下错就直接报 exec format error 或 Bad CPU type in executable。
验证方法很简单:解压后执行 file frankenphp,输出里必须含 arm64(Apple Silicon)或 x86_64(Intel),否则就是架构不匹配。
常见误操作:
- 在 M1 Mac 上用 Homebrew 安装非 arm64 版本的 FrankenPHP(Homebrew 默认可能拉错源)
- 从第三方镜像或旧文档链接下载了过期的通用包(FrankenPHP 官方从 v1.0.0 起已不再提供 fat binary)
- 把 Linux 的
frankenphp-linux-amd64误当成 macOS 包下载
Linux 服务器怎么确认自己该用 amd64 还是 arm64
别猜,直接查:uname -m。输出是 aarch64 就选 frankenphp-linux-arm64.tar.gz;输出是 x86_64 就选 frankenphp-linux-amd64.tar.gz。
注意几个容易混淆的点:
-
arm64和aarch64是同一回事,Linux 发行版里常用后者命名 -
armv7l或armv8l不代表可用arm64包,FrankenPHP 不支持 32 位 ARM - 某些云厂商(如 AWS Graviton、阿里云倚天)实例明确是 aarch64,但控制台可能只写“ARM”,得靠
uname -m实锤
为什么不能靠 Composer 或 PHP 自身判断架构
Composer 没有 --arch 参数,php -v 也看不出二进制是编译在什么 CPU 上跑的——它只反映当前 PHP 解释器运行时的平台,不是 FrankenPHP 主程序的架构。
FrankenPHP 是一个 Go + PHP 运行时拼成的独立二进制,它的架构由构建时目标平台决定,和你本地 PHP 版本、扩展、甚至 phpinfo() 都无关。你用的 frankenphp 文件本身,才是唯一权威。
所以别在项目里写脚本自动选包,也别依赖 CI 环境变量推断——最稳的方式,永远是先 uname -m 或 file frankenphp,再下载对应包。
下载错架构后最典型的错误现象
不是报错“找不到命令”,而是更底层的失败信号:
- macOS:
zsh: bad CPU type in executable: frankenphp - Linux:
bash: ./frankenphp: cannot execute binary file: Exec format error - Docker:
standard_init_linux.go:228: exec user process caused: no such file or directory(其实是动态链接器不匹配,常被误判为路径问题)
这些都不是权限或配置问题,换对架构包就能秒解。但很多人会花半小时调 chmod、LD_LIBRARY_PATH 或 Caddyfile,其实根本没走对方向。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











