Windows11下将PHP从8.2.12升级到8.3.9后cURL异常问题
解决PHP 8.3.9 cURL无法获取接口JSON响应的问题
1. 补全cURL依赖库
PHP 8.3的cURL扩展依赖配套的libcurl.dll,从PHP官网下载的线程安全包中,把根目录下的libcurl.dll复制到XAMPP的apache\bin目录,替换掉旧版本文件。同时确认php\ext里的php_curl.dll是PHP 8.3.9原生带的,不要混用旧版本文件。
2. 修正php.ini配置
- 不要用绝对路径指定扩展,改回标准配置:
extension_dir = "ext" extension=curl - 检查并设置CA证书路径:从旧的
php_old目录复制cacert.pem到新PHP的extras\ssl目录,然后在php.ini里配置:curl.cainfo = "C:\xampp\php\extras\ssl\cacert.pem"
3. 确保配置生效
修改完php.ini后,完全停止再重启Apache服务,不要仅刷新phpinfo页面,确保新配置和依赖库被正确加载。
4. 捕获cURL错误信息
在代码中添加错误捕获,定位具体问题:
$ch = curl_init('你的目标接口URL'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 开启详细调试信息(可选) curl_setopt($ch, CURLOPT_VERBOSE, true); $verbose = fopen('php://temp', 'w+'); curl_setopt($ch, CURLOPT_STDERR, $verbose); $response = curl_exec($ch); if(curl_errno($ch)){ rewind($verbose); $verboseLog = stream_get_contents($verbose); echo 'cURL错误:' . curl_error($ch) . '<br>详细日志:' . $verboseLog; } curl_close($ch); var_dump($response);
根据输出的错误信息,判断是证书问题、TLS版本不兼容还是网络连通性问题。
5. 调整TLS协议版本
如果目标接口仅支持旧版TLS,在代码中强制指定:
curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
6. 改用XAMPP适配的PHP包
直接下载XAMPP官方提供的PHP 8.3更新包,而非独立的PHP官方包,这样能保证与XAMPP的Apache等组件完全兼容,避免依赖不匹配的问题。
内容的提问来源于stack exchange,提问作者Schweino
相关产品推荐
相关产品推荐

