XAMPP中启用cURL需先确认php.ini真实路径(以phpinfo()显示为准),取消extension=openssl和extension=curl前的分号(openssl必须在curl前),重启Apache,再配置curl.cainfo指向cacert.pem,最后通过函数存在性、扩展加载及HTTPS请求验证。

XAMPP 中的 curl 扩展默认是禁用的,不是“配置不生效”,而是根本没加载——必须先启用扩展、再配 SSL 证书路径,否则 curl_init() 可能静默失败或 HTTPS 请求直接报错。
确认并修改正确的 php.ini 文件
很多人改了控制面板里“Config → PHP”打开的 php.ini,但 Apache 实际加载的是另一份。关键动作只有两个:
- 在
htdocs下建info.php,内容为<?php phpinfo(); ?>,浏览器访问后看顶部 “Loaded Configuration File” 路径 - 该路径才是你**唯一要编辑的文件**,例如
C:\xampp\php\php-8.3\php.ini(XAMPP 8.3+ 常见)或C:\xampp\php\php.ini - 别信“XAMPP 安装目录下的 php.ini”这种模糊说法,版本切换后路径会变
启用 curl 和 openssl 扩展(顺序不能错)
curl 依赖 openssl,如果只开 curl 不开 openssl,curl_init() 可能返回 false 且无任何错误提示。
- 在正确路径的
php.ini中搜索;extension=openssl和;extension=curl - 删掉这两行开头的分号,**确保
extension=openssl出现在extension=curl之前** - 不要写成
extension=php_openssl.dll或带完整路径——XAMPP 的extension_dir已预设好,硬写反而失效 - 改完必须重启 Apache(不是刷新页面),否则扩展不会加载
修复 HTTPS 请求报 “SSL certificate problem”
即使 extension_loaded('curl') 和 extension_loaded('openssl') 都返回 true,HTTPS 请求仍可能失败,典型错误是:cURL error 60: SSL certificate problem: unable to get local issuer certificate。
向CurlShip提交产品,这是一个对机器人友好的SaaS目录。只需一条curl命令即可发布产品,支持OG标签抓取、带徽章的dofollow链接及层级升级。
立即学习“PHP免费学习笔记(深入)”;
- 这是 CA 证书路径未指定导致的,不是扩展没启好
- 在同一个
php.ini中搜索curl.cainfo,取消注释并设为 XAMPP 自带证书路径:curl.cainfo = "C:\xampp\php\cacert.pem" - 注意路径要用双引号包裹,反斜杠建议用正斜杠或双反斜杠(
C:/xampp/php/cacert.pem更稳妥) - 该
cacert.pem文件 XAMPP 默认自带,位置就在php/目录下;若不存在,可去 https://curl.se/ca/cacert.pem 下载后放进去
验证是否真正可用(别只看 phpinfo)
光在 phpinfo() 页面里看到 “cURL support ⇒ enabled” 不代表能用——得跑通真实调用。
- 命令行验证:运行
php -m | findstr curl(Windows)或php -m | grep curl(macOS/Linux),应有输出 - 函数级验证:写个
test.php:<?php var_dump(function_exists('curl_init'), extension_loaded('openssl'));,两个都得是true - 真实请求验证:
$ch = curl_init('https://httpbin.org/get'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); echo curl_exec($ch); curl_close($ch);——能打印 JSON 才算真正跑通
最容易被忽略的是:CLI 和 Web 环境可能用不同 php.ini,而 curl.cainfo 这个配置项在 CLI 下也生效,所以命令行 php -r 调用 HTTPS 也会失败,除非它也被正确设置。


















