使用 curl 採集 https 網址時報錯:php
$html = curl_exec(self::$ch); if (!$html) { echo curl_errno(self::$ch).PHP_EOL; echo curl_error(self::$ch); }
77html
error setting certificate verify locations:linux
CAfile: C:\Users\local\ssl\cert.pem瀏覽器
CApath: nonefalsecurl
php 手冊上查詢到 curl 錯誤代碼:url
[77] => 'CURLE_SSL_CACERT_BADFILE'code
字面意思是 ca 證書文件錯誤htm
網上有說從瀏覽器中一條條導出,感受太過麻煩。試着從本身的 linux 上拷貝了份證書覆蓋掉 win 系統 中的 C:\Users\local\ssl\cert.pem 發現能用。ssl
linux 中 ca 證書默認位置:/etc/ssl/certs/get
cp /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem /mnt/www/
拷到 C:\Users\local\ssl\ 目錄下,替換掉 cert.pem 便可
另外一種解決方式,是代碼中設置 curl 選項
if (strpos($url, 'https') === 0) { $opts[CURLOPT_SSL_VERIFYPEER] = false; }
ps:
查看 php 使用的配置文件路徑:
php -i |findstr /i config
php 證書位置設置: vi /etc/php.ini
openssl.cafile="C:\Users\local\ssl\cert.pem"