必须修改 apache 实际加载的 php.ini(通过 phpinfo() 中“loaded configuration file”路径确认),取消 extension=openssl 和 extension=curl 前的分号(openssl 在 curl 前),并设置 curl.cainfo="c:\xampp\php\cacert.pem",改后重启 apache;cli 模式需单独配置对应 php.ini。

确认你改的是 Apache 实际加载的 php.ini
很多人反复重启 Apache,curl_init() 仍返回 false,根本原因是改错了 php.ini 文件。XAMPP 控制面板里“Config → PHP”打开的文件,往往只是模板或旧版本路径,不是 Apache 真正读取的那个。
正确做法:
在 htdocs 下建一个 info.php,内容为 <?php phpinfo(); ?>,浏览器访问 http://localhost/info.php,搜索 “Loaded Configuration File”,看到的路径才是真实生效的 php.ini —— 通常是 C:\xampp\php\php.ini,但若用了 PHP 版本切换(比如 XAMPP 8.3),也可能是 C:\xampp\php\php-8.3\php.ini。
- 只改这个路径下的文件才有效;其他地方的修改全是白忙
- 别依赖控制面板的“PHP Settings”快捷入口,它不保证指向当前运行配置
- 改完后必须重启 Apache(不是刷新页面),否则扩展不会加载
取消注释 extension=openssl,且确保位置正确
XAMPP 的 PHP 是静态编译 OpenSSL 的,不需要手动复制 php_openssl.dll 或往 system32 放 DLL。唯一要做的,就是打开正确的 php.ini,找到这一行:
;<code>extension=openssl</code>
删掉开头的分号,变成:
extension=openssl
- 不要写成
extension=php_openssl.dll—— XAMPP 的extension_dir已预设好,硬写路径反而会失败 - 不要漏掉
extension=curl,因为 HTTPS 请求依赖 cURL + OpenSSL 联动 -
openssl必须出现在curl之前(即配置顺序),否则curl_init()可能静默失败
修复 cURL error 60: SSL certificate problem
即使 extension=openssl 和 extension=curl 都启用了,执行 file_get_contents('https://httpbin.org/get') 或 curl_exec() 仍可能报错:
cURL error 60: SSL certificate problem: unable to get local issuer certificate
这不是扩展没开,而是 CA 证书路径没配。XAMPP 自带了证书文件 cacert.pem,只需告诉 PHP 去哪找:
- 在
php.ini中搜索curl.cainfo,取消注释并填入完整路径,例如:curl.cainfo = "C:\xampp\php\cacert.pem" - 如果该配置项不存在,就手动加一行到
[curl]段落或文件末尾 - 证书文件默认就在
C:\xampp\php\cacert.pem,若缺失可去 https://www.php.cn/link/5fe4dadcdb001d8566cd20e6d8a20251 下载保存至此
验证是否真正可用,别只看 phpinfo()
phpinfo() 显示 “OpenSSL Support enabled” 只代表模块注册成功,不代表 HTTPS 请求能跑通。必须实测:
- 命令行检查:运行
php -m | findstr openssl(Windows)或php -m | grep openssl(macOS/Linux),应有输出 - 函数级验证:写个脚本
var_dump(function_exists('openssl_encrypt'), extension_loaded('openssl'));,两个都得是true - 真实请求测试:
$ch = curl_init('https://httpbin.org/get');<br>curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);<br>echo curl_exec($ch);<br>curl_close($ch);
能输出 JSON 才算真正打通
最容易被忽略的是 CLI 模式下的配置 —— Composer、命令行脚本用的是 PHP CLI,它加载的是另一份 php.ini(常和 Apache 的不同)。如果 php -m 查不到 openssl,就得单独去 CLI 对应的 php.ini 里再开一次。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











