必须修改 phpinfo() 显示的“loaded configuration file”路径下的 php.ini,取消 extension=curl 和 extension=openssl(前者需在后者之后)注释,并配置 curl.cainfo 指向 cacert.pem,最后重启 apache。

确认你改的是 Apache 实际加载的 php.ini
很多人反复重启 Apache,curl_init() 依然返回 false,根本原因是改错了 php.ini 文件。XAMPP 控制面板里“Config → PHP”打开的文件,不一定是 Apache 正在用的那一份。
真实路径必须以 phpinfo() 页面顶部 “Loaded Configuration File” 显示的为准。建一个 info.php 放在 htdocs 下,内容为 <?php phpinfo(); ?>,浏览器访问后一眼就能看到。
- 常见真实路径是
C:\xampp\php\php.ini,但如果你用了 XAMPP 的 PHP 版本切换功能(比如选了 PHP 8.3),实际路径可能是C:\xampp\php\php-8.3\php.ini - Apache 和命令行
php -v可能用不同配置,验证扩展是否启用请统一用网页方式或php -m | findstr curl(Windows) - 别信控制面板默认打开的那个文件——它只是个快捷入口,不是运行时加载源
取消注释 extension=curl,不是 extension=php_curl.dll
XAMPP 从 PHP 7.4 起已统一使用 extension=curl 写法,旧版 extension=php_curl.dll 在 PHP 8+ 会直接报错或静默失败。打开正确的 php.ini,搜索 ;extension=curl,删掉前面的分号即可。
- 不需要复制任何 DLL 文件到
system32或手动指定完整路径,XAMPP 的extension_dir已预设好,硬写extension="C:/xampp/php/ext/php_curl.dll"反而会导致加载失败 - 如果同时要用 HTTPS,必须一并启用
extension=openssl,且这一行要写在extension=curl之前——cURL 依赖 OpenSSL,顺序颠倒可能导致curl_init()返回false却无明确错误 - 改完保存,必须重启 Apache(不是刷新页面),否则改动完全不生效
验证不是只看 phpinfo() 有没有“curl”字样
phpinfo() 页面里出现 curl 模块名,只说明配置被读到了,不代表函数可用。真正有效的验证分三步:
向CurlShip提交产品,这是一个对机器人友好的SaaS目录。只需一条curl命令即可发布产品,支持OG标签抓取、带徽章的dofollow链接及层级升级。
- 执行
php -m | findstr curl(Windows)或php -m | grep curl(macOS/Linux),输出含curl才算 CLI 层启用成功 - 写个测试脚本:
<?php var_dump(function_exists('curl_init'), extension_loaded('curl'));,两个都得是true - 跑一次真实请求:
$ch = curl_init('https://httpbin.org/get'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); echo curl_exec($ch); curl_close($ch);——若报cURL error 60: SSL certificate problem,说明 OpenSSL 已加载但 CA 证书路径没配对
HTTPS 请求失败?配 curl.cainfo 指向 cacert.pem
即使 extension=openssl 和 extension=curl 都启用了,发起 HTTPS 请求仍可能失败,典型错误是:cURL error 60: SSL certificate problem: unable to get local issuer certificate。这不是扩展没开,而是 CA 根证书缺失。
XAMPP 自带 cacert.pem,路径通常是 C:\xampp\php\extras\ssl\cacert.pem。在 php.ini 里加一行:
curl.cainfo = "C:\xampp\php\extras\ssl\cacert.pem"
注意:
- 路径必须用双引号包裹,反斜杠建议写成正斜杠或双反斜杠,避免转义问题
- 这个配置只影响 cURL,不影响其他 OpenSSL 使用场景;不要试图用
openssl.cafile替代它,两者作用范围不同 - 改完仍需重启 Apache,且该设置对 CLI 模式也生效(
php -r "print_r(curl_version());"中的features会显示 SSL 支持)
curl.cainfo 是最容易被跳过的一步——看起来跟“开启扩展”无关,但没它,HTTPS 就是跑不通。php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










