MacOS Ventura下Laravel Guzzle调用API遇objc初始化fork错误求助
问题描述
使用MacBook Pro Ventura系统(已安装当前最新版本)约2个月,日常开发PHP和Laravel项目。切换至Ventura后,通过Laravel的Guzzle调用本地或外部API时,触发以下错误:
objc[81552]: +[__NSCFConstantString initialize] may have been in progress in another thread when fork() was called. objc[81552]: +[__NSCFConstantString initialize] may have been in progress in another thread when fork() was called. We cannot safely call it or ignore it in the fork() child process. Crashing instead. Set a breakpoint on objc_initializeAfterForkError to debug.
此前API通信正常,确认问题与Ventura系统相关。已尝试在.zshrc或.bash_profile中添加以下配置,但无效——配置添加后错误不再显示,但请求仍无法发送:
export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES export DISABLE_SPRING=true export NO_PROXY=*
测试覆盖PHP 8.1和7.2两个版本的项目,均出现该问题;但Insomnia、Postman可正常调用相同API。
解决方案
1. 针对PHP进程直接注入环境变量
不要将环境变量放在shell配置文件中,而是在启动PHP服务或执行脚本时直接指定:
OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES php artisan serve
如果使用PHP-FPM,修改对应版本的FPM配置文件(例如/usr/local/etc/php/8.1/php-fpm.d/www.conf),取消env[OBJC_DISABLE_INITIALIZE_FORK_SAFETY] = YES的注释,然后重启FPM:
brew services restart php@8.1
2. 禁用Guzzle的多线程处理
实例化Guzzle客户端时,强制使用单线程Handler,避免fork机制冲突:
use GuzzleHttp\Client; use GuzzleHttp\Handler\CurlHandler; use GuzzleHttp\HandlerStack; $handlerStack = HandlerStack::create(new CurlHandler()); $client = new Client(['handler' => $handlerStack]);
3. 清理系统代理干扰
即使设置了NO_PROXY=*,Ventura的系统代理仍可能影响PHP进程:
- 关闭系统偏好设置中的「自动代理配置」
- 在终端执行
unset http_proxy和unset https_proxy后,重新测试API请求
4. 更新依赖版本
将Guzzle升级到对应PHP版本的最新稳定版,同时确保Laravel框架更新到兼容Ventura的版本——部分旧版本HTTP客户端与Ventura的fork机制存在兼容性问题。
内容的提问来源于stack exchange,提问作者Leonardo Webster
相关产品推荐
相关产品推荐

