在macOS上运行ThinkPHP 8需四步:解除FrankenPHP的Gatekeeper隔离、验证其为真Mach-O二进制、确保宿主PHP已启用pdo/mbstring/openssl且版本≥8.0、用worker.php+Caddyfile启用worker模式;缺一不可。

在macOS上用FrankenPHP v1.3运行ThinkPHP 8项目,需同时绕过Gatekeeper限制、确保PHP扩展就位、正确指向public根目录并启用worker模式提升性能,缺一不可。
确认FrankenPHP二进制可执行
下载官方v1.3 macOS版本(如frankenphp_1.3.0_darwin_arm64.tar.gz),解压后进入目录,执行ls -l frankenphp——若显示-r-xr-xr-x但运行报Operation not permitted,说明Gatekeeper拦截生效。【chmod +x无效,必须清除quarantine标记或右键打开】
执行xattr -d com.apple.quarantine frankenphp清除下载隔离属性;若提示No such xattr,说明文件非浏览器下载,改用open -a Finder .触发标记后再清除。
验证是否为真二进制:file frankenphp输出必须含Mach-O 64-bit executable,否则PATH中存在同名shell脚本干扰。
立即学习“PHP免费学习笔记(深入)”;
准备ThinkPHP 8项目环境
确保项目结构规范:根目录下含public/(含index.php)、app/、runtime/、vendor/;runtime/目录需可写:chmod -R 755 runtime。
检查PHP扩展依赖:FrankenPHP不接管扩展加载,需宿主PHP环境已启用pdo、mbstring、openssl、curl——运行php -m | grep -E "(pdo|mbstring|openssl)"确认全部出现。
若使用Homebrew安装的PHP(如php@8.0),确保php -v输出为8.0.x;否则FrankenPHP虽能启动,ThinkPHP会在引导阶段因PHP版本不满足而直接Fatal Error。
启用worker模式运行(推荐)
第一步:替换入口脚本
将public/index.php重命名为public/index.php.bak,再从FrankenPHP官方仓库复制对应ThinkPHP 8的worker.php模板到public/worker.php(内容核心是frankenphp_handle_request()包裹$app->http->run()并调用$response->send())。
第二步:创建Caddyfile
在项目根目录新建Caddyfile,写入:
localhost:8080 {<br> root * ./public<br> php_backend<br> frankenphp {<br> worker {<br> file "public/worker.php"<br> }<br> }<br>}
第三步:启动服务
终端进入项目根目录,执行./frankenphp run——FrankenPHP会自动读取当前目录下的Caddyfile并监听8080端口。访问http://localhost:8080,看到ThinkPHP欢迎页即成功。
注意:worker模式下runtime/log/日志会实时刷新,若页面空白或500,立即查看该目录下的think.log,而非Caddy error log。



















