必须绕过Gatekeeper、显式指定--document-root、确保public/index.php存在,否则静默退出或404;右键“打开”豁免拦截,用frankenphp php-server --document-root public/启动,或配Caddyfile运行frankenphp启用HTTPS/HTTP/3。

在 macOS 14 Sonoma 上启动 FrankenPHP v1.4 独立二进制本地开发服务,需绕过 Gatekeeper 拦截、明确指定文档根目录、确保入口文件就位——缺一不可,否则终端静默退出或浏览器返回 404。
确认并绕过 Gatekeeper 拦截
FrankenPHP v1.4 官方预编译二进制未被 Apple 公证,macOS 14 Sonoma 默认拒绝执行,chmod +x 无效。
方法一:右键“打开”临时豁免(推荐首次运行)
在 Finder 中定位到下载的 frankenphp 文件 → 右键点击 → 选择“打开” → 弹窗中点“仍要打开”。系统将为该文件单独放行,后续 ./frankenphp 或双击均可执行。
方法二:命令行清除隔离标记(适合重复部署)
执行 【xattr -d com.apple.quarantine frankenphp】。注意:仅对 Safari/Chrome 下载的文件有效;若用 curl -O 获取,需先 open -a Finder . 触发 quarantine 再清除。
立即学习“PHP免费学习笔记(深入)”;
⚠️ 不要用 sudo spctl --master-disable 关闭 Gatekeeper——这会削弱整机防护,Sonoma 系统不建议。
验证二进制真实性与依赖
绕过拦截后仍 Permission denied 或立即退出?先排除两个隐藏前提:
第一步:确认没被同名脚本覆盖
运行 which frankenphp,再执行 file $(which frankenphp)。输出必须含 【Mach-O 64-bit executable arm64】(Apple Silicon)或 【x86_64】(Intel),若显示 “shell script”,说明 PATH 中存在冲突脚本,删掉或重命名。
第二步:检查动态库依赖是否齐全
FrankenPHP 静态链接大部分库,但需系统级 libiconv、libz 等。运行 otool -L frankenphp,确认无 “not found” 条目。若提示缺失,用 brew install zlib libiconv 后重试。
启动 PHP 开发服务(两种模式任选)
FrankenPHP v1.4 不自动猜测路径,必须显式声明网站根目录,否则 404 或空白页。
方法1:用 php-server 子命令快速验证(无需 Caddyfile)
确保项目中有 public/ 目录且含 index.php → 终端进入项目根目录 → 执行 【frankenphp php-server --document-root public/】 → 访问 http://localhost:8000。端口可改:--addr :8080。
方法2:用 Caddyfile 启动完整 Web 服务(支持 HTTPS/HTTP/3)
在项目根目录新建文件 Caddyfile,内容至少三行:
{
frankenphp
}
localhost {
root * public/
php_server
}
保存后直接运行 【frankenphp】(不带任何参数)→ 访问 https://localhost(首次需手动接受自签名证书)。
注意:public/index.php 必须存在且权限为 644,若用 Laravel/Symfony,还需确保 .env 中 APP_DEBUG=true 时已安装 symfony/var-dumper,否则启动即 fatal error。



















