build-static 脚本仅存在于 FrankenPHP 源码仓库中,非官方 Docker 镜像或二进制包组成部分;用户应直接使用 Releases 页面提供的预编译静态二进制,仅在需定制修改源码、PHP 版本或扩展时才需自行运行该脚本。

build-static 脚本不在官方 Docker 镜像或二进制包里
FrankenPHP 官方发布的 dunglas/frankenphp Docker 镜像和独立二进制(如 frankenphp-linux-amd64)都不带 build-static 脚本。它只存在于 FrankenPHP 的源码仓库中,是开发者用于构建静态链接版二进制的内部工具,不是面向终端用户的安装组件。
你实际需要的是 prebuilt 静态二进制,不是自己 build
绝大多数生产或本地开发场景下,你不需要运行 build-static:
- Linux 用户直接下载 Releases 页面的
frankenphp-linux-*.tar.gz包,解压即用 —— 这些就是用该脚本预先构建好的静态二进制 - macOS 用户同理,用
frankenphp-darwin-*.tar.gz,已含 PHP 8.5 和常用扩展 - Docker 用户根本不用管这个脚本,
dunglas/frankenphp镜像底层用的就是静态二进制 + Caddy
只有当你想:修改 FrankenPHP 源码、换 PHP 版本、或加自定义扩展时,才需要 clone 仓库并运行 build-static。这时脚本路径是:./scripts/build-static(在 github.com/dunglas/frankenphp 仓库根目录下)。
自己跑 build-static 前必须看清依赖和平台限制
这个脚本本质是封装了 zig cc + go build 的交叉编译流程,对环境要求苛刻:
立即学习“PHP免费学习笔记(深入)”;
- 仅支持 Linux/macOS,Windows 上无法执行(即使 WSL2 也要注意 Zig 版本)
- 必须安装 Zig 0.13+(不是系统包管理器里的旧版
zig),且ZIG_LIBC环境变量要指向 musl - Go 1.23+,且
CGO_ENABLED=1必须生效 - PHP 源码需提前放在
./php-src目录,否则脚本会报php-src directory not found
漏掉任意一条,./scripts/build-static 就会卡在 Building libphp.a 或直接 panic。线上部署 Laravel 完全没必要走这一步 —— 下载现成二进制省事又稳定。
容易被忽略的一点:Caddyfile 里没有 build-static 的痕迹
无论你用 Docker、预编译二进制,还是自己 build,最终生效的都是 Caddy 的配置逻辑。所有 PHP 执行行为由 php_server 指令控制,跟 build-static 是否运行过毫无关系。别因为看到文档里提了这个脚本,就误以为“不跑一遍就跑不起来”。它只影响二进制怎么生成,不影响怎么用。



















