php curl库 获取https url内容时候,默认是检查根证书的。如果php环境没有配置本地根证书的话,执行会有报错的。
例如:
$url = 'https://img.alicdn.com/tps/i2/TB1bNE7LFXXXXaOXFXXwFSA1XXX-292-116.png_145x145.jpg';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
$output = curl_exec($ch);
echo curl_error($ch);
执行后$output为false,报错内容为:SSL certificate problem: unable to get local issuer certificate.
解决方案有两种:
一.关闭本地证书验证.
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
//是否合法的证书
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
//证书与域名是否匹配
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
$output = curl_exec($ch);
二.在php环境中配置CA 根证书。
1.下载根证书:ca-bundle.crt
2.php.ini 里面添加:
[curl]
curl.cainfo = C:\Users\silk\Downloads\ca-bundle.crt
结论:
生产环境还是建议使用第二种方式,防止http内容劫持。