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

Mac本地PHP切换cURL至OpenSSL失败求助:仍用SecureTransport

解决Mac上PHP链接brew版OpenSSL curl的问题

我之前也碰到过一模一样的情况——编译PHP时明明指定了brew的curl,但运行时还是绑定系统自带的SecureTransport版本。问题出在动态链接库的加载优先级:PHP编译时找到了brew curl的头文件(所以Used Library里的Compiled版本是对的),但运行时系统默认加载了/usr/lib下的旧curl库。

下面是几个亲测有效的解决方法,按推荐程度排序:

方法一:修改PHP二进制的动态链接路径(最彻底)

这个方法直接修改PHP可执行文件的依赖库路径,不需要依赖环境变量:

  1. 先找到你的PHP二进制文件路径:

    which php
    

    通常会输出/usr/local/bin/php或者/usr/bin/php(如果是brew安装的PHP)。

  2. 用install_name_tool替换依赖的curl库:

    install_name_tool -change /usr/lib/libcurl.4.dylib $(brew --prefix curl)/lib/libcurl.4.dylib $(which php)
    
  3. 验证结果:

    php -i | grep -A 2 "libcurl"
    

    现在应该能看到Linked版本变成brew安装的7.59.0,且SSL版本显示OpenSSL。

方法二:通过环境变量指定库加载路径

如果不想修改二进制文件,可以通过设置DYLD_LIBRARY_PATH让系统优先加载brew的curl库:

针对CLI PHP

编辑你的shell配置文件(~/.bash_profile、~/.zshrc或者~/.profile),添加:

export DYLD_LIBRARY_PATH="$(brew --prefix curl)/lib:$DYLD_LIBRARY_PATH"

然后执行source ~/.zshrc(对应你的shell)或者重启终端,再验证即可。

针对Apache的PHP模块

在Apache的配置文件(比如/etc/apache2/httpd.conf或者/usr/local/etc/httpd/httpd.conf)中添加:

SetEnv DYLD_LIBRARY_PATH $(brew --prefix curl)/lib

然后重启Apache:

sudo apachectl restart

方法三:重新编译PHP时强制指定链接路径

如果上面的方法都不想用,也可以重新编译PHP,在configure阶段就把brew curl的库路径硬编码进去:

./configure \
  --with-curl=$(brew --prefix curl) \
  LDFLAGS="-L$(brew --prefix curl)/lib -Wl,-rpath,$(brew --prefix curl)/lib"
# 然后执行
make && make install

这里的-Wl,-rpath参数会把brew curl的库路径添加到PHP的运行时链接路径中,确保优先加载。

额外检查

确保brew的curl已经正确安装并link:

brew link curl --force

(如果提示冲突,可以用brew link curl --force --overwrite,不过这个会替换系统默认的curl命令,如果你不需要的话,可以跳过,上面的方法已经足够让PHP单独使用brew的curl)

内容的提问来源于stack exchange,提问作者Kevinleary.net

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:57:42