确认真实php.ini路径后,取消extension=openssl和extension=curl前的分号,确保openssl在curl前启用,重启apache,并配置curl.cainfo指向xampp自带cacert.pem文件。

确认 PHP 版本和 php.ini 实际路径
XAMPP 启动后,phpinfo() 显示的 Loaded Configuration File 路径才是真实生效的 php.ini,不是 XAMPP 控制面板里“Config → PHP”默认打开的那个。很多人改错文件,导致扩展始终不生效。
实操建议:
- 在
htdocs下建一个info.php,内容为<?php phpinfo(); ?>,浏览器访问确认路径 - XAMPP 不同版本(如 8.2 vs 8.3)可能自带不同 PHP,
php -v和面板显示的版本要一致 - Windows 下常见路径是
C:\xampp\php\php.ini,但若启用了多 PHP 切换(如通过 XAMPP Control Panel 的 PHP Switcher),实际加载的是C:\xampp\php\php-8.3\php.ini这类子目录下的文件
启用 cURL 和 OpenSSL 扩展
cURL 和 OpenSSL 在 XAMPP 中默认是编译进 PHP 的,但扩展模块被注释掉了。直接取消注释即可,**不需要下载 DLL 或手动复制文件**。
打开正确的 php.ini,搜索并取消以下两行开头的分号:
;extension=openssl ;extension=curl
改为:
extension=openssl extension=curl
注意点:
- 不要写成
extension=php_openssl.dll或带完整路径——XAMPP 的extension_dir已预设好,硬写路径反而会失败 - OpenSSL 必须先于 cURL 启用,因为 cURL 依赖 OpenSSL;如果只开 cURL 不开 OpenSSL,
curl_init()可能返回 false 且无报错 - 修改后必须重启 Apache(不是仅刷新页面),否则扩展不会加载
验证扩展是否真正生效
光看 phpinfo() 里有没有模块名不够,得确认函数可用、连接可跑通。
执行以下检查:
- 运行
php -m | findstr curl(Windows)或php -m | grep curl(macOS/Linux),确认输出含curl - 写个测试脚本:
<?php var_dump(function_exists('curl_init'), extension_loaded('openssl'));,应返回true, true - 真实调用一次 HTTPS 请求:
$ch = curl_init('https://httpbin.org/get'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); echo curl_exec($ch); curl_close($ch);—— 若报错SSL certificate problem,说明 OpenSSL 已加载但 CA 证书路径未配,见下一条
修复 “SSL certificate problem” 错误
启用 OpenSSL 后仍无法发起 HTTPS 请求,常见错误是:cURL error 60: SSL certificate problem: unable to get local issuer certificate。这不是扩展没开,而是 PHP 不知道去哪里找根证书。
解决方法(二选一):
- 在
php.ini中添加:curl.cainfo = "C:\xampp\php\extras\ssl\cacert.pem"(Windows)或对应路径;XAMPP 自带该文件,无需额外下载 - 或临时绕过(仅开发环境):
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);,但生产环境禁用
注意:XAMPP 8.0+ 默认已配置 curl.cainfo,但如果手动改过 php.ini 或切换过 PHP 版本,这行容易被删掉或路径失效。
CA 文件路径一旦写错,curl_exec() 就会静默失败或报错 60,这个细节最容易被忽略。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











