curl error 60 错误主因是 curl.cainfo 路径配置错误或文件不存在,需确保其为绝对路径、用双引号包裹、指向真实可读的 pem 文件,并同时设置 openssl.cafile 指向同一路径,且 apache 与 cli 的 php.ini 均需分别配置并重启服务。

php.ini里curl.cainfo路径写错,证书根本加载不了
错误 cURL error 60: SSL certificate problem 不代表 cURL 没开,而是 PHP 找不到或读不了根证书文件。最常见原因是 curl.cainfo 配置项路径不合法或文件不存在。
-
curl.cainfo必须用双引号包裹完整路径,例如:curl.cainfo = "C:/xampp/php/extras/ssl/cacert.pem"(正斜杠更稳妥,反斜杠需写成C:\xampp\php\extras\ssl\cacert.pem) - 路径末尾不能多加反斜杠,
"C:/xampp/php/extras/ssl/"会导致解析失败 - 先确认文件真实存在:打开资源管理器,手动导航到
C: mppphpextrasssl,看有没有cacert.pem;没有就去 curl.se/ca/cacert.pem 下载,保存为该路径 - 不要只改 Apache 的 php.ini —— 如果你用
php -r "print_r(curl_version());"命令行测试也报错,说明 CLI 模式下的 php.ini 同样要配curl.cainfo
openssl.cafile 和 curl.cainfo 必须同时设,且指向同一份 cacert.pem
仅配 curl.cainfo 不够,PHP 内部很多 HTTPS 相关函数(比如 file_get_contents("https://")、stream_context_create())依赖 openssl.cafile,它和 curl.cainfo 是两套机制,互不替代。
- 在 php.ini 中添加或取消注释这两行(位置无所谓,但建议放在
[openssl]和[curl]段落内):openssl.cafile = "C:/xampp/php/extras/ssl/cacert.pem"curl.cainfo = "C:/xampp/php/extras/ssl/cacert.pem" - 两个路径必须完全一致,否则会出现 curl 正常但
file_get_contents报错,或反过来 - 改完后运行
php -r "var_dump(openssl_get_cert_locations());",检查输出中cafile值是否匹配你设置的路径
Apache 和 CLI 用的不是同一个 php.ini,得分别确认和修改
你在 XAMPP 控制面板点“Config → PHP”打开的文件,大概率不是 Apache 实际加载的那个;而命令行 php --ini 显示的又是 CLI 模式路径——两者经常不同,尤其当你启用了 PHP 版本切换功能(如 PHP 8.2 / 8.3)。
- 验证 Apache 实际加载的配置:建
info.php放在htdocs下,内容为<?php phpinfo(); ?>,访问http://localhost/info.php,搜索 “Loaded Configuration File” - 验证 CLI 加载的配置:命令行执行
php --ini,看 “Loaded Configuration File” 行 - 两个路径可能分别是:
C: mppphpphp-8.3php.ini(Apache)和C: mppphpphp.ini(CLI),都得配curl.cainfo和openssl.cafile - 别信控制面板默认打开的文件——它只是个快捷方式,不是运行时源
改完 php.ini 必须重启 Apache,且不能靠刷新页面验证
修改 php.ini 后不重启 Apache,所有改动都不生效。而且仅看 phpinfo() 页面里有没有 “cURL” 字样,不能说明 HTTPS 请求就一定成功。
- 重启操作必须是 XAMPP 控制面板里对 Apache 点 “Stop”,再点 “Start”——“Restart” 按钮有时会跳过某些模块重载
- 验证是否真正生效,写个脚本测试真实 HTTPS 请求:
$ch = curl_init("https://httpbin.org/get"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); echo curl_exec($ch) ?: "failed"; curl_close($ch); - 如果仍报错,用
php -r "print_r(curl_version());"查看ssl_version是否非空,空值说明 OpenSSL 根本没连上 - 证书路径配置正确 + 扩展启用 + 服务重启,三者缺一不可
phpinfo() 和 php --ini 这两步确认动作——它们比反复重启更省时间。php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











