You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 15:25:27