問題原因
檢視phpinfo 發現curl擴充套件的SSL Version版本為:Openssl1.1.0, 在ubuntu 中,ubuntu 18.04+版本採用的是最新的openssl 1.1,之前的ubuntu基本都是1.0的版本,openssl1.1安裝低於php7的版本
會報錯.
解決
1.失敗的解決過程
最先我想是為curl指定ssl的版本,然後再將此curl編譯到php的版本中,可是遇到一下問題.
- 編譯curl 指定ssl版本的時候報錯,各種錯誤,最後摸索到下面這條命令,編譯成功
LIBS="-ldl" PKG_CONFIG_PATH=/usr/local/openssl/lib/pkgconfig ./configure --with-ssl --with-libssl-prefix=/usr/local/openssl --disable-shared --prefix=/usr/local/curl
- 當我嘗試將編譯安裝好的curl,編譯進php5.6的時候,還是報錯這條路是不好走.
2.成功的解決過程
我重新安裝系統,在執行lnmp多版本安裝的時候提示我
Please reinstall the libcurl distribution 缺少這個庫
執行命令
sudo apt-get install libcurl4-gnutls-dev
然後進行lnmp包的多版本安裝,此時php5版本的curl https訪問竟然成功了,我去檢視phpinfo,發現SSL Version版本為:GnuTLS/3.5.18
回想一下,應該是libcurl這庫的版本決定了SSL Versionl的版本
file_get_contents無法獲取到https開頭的連結內容問題
解決:
$options = array(
'http' => array(
'method' => 'POST',
'header' => 'Content-type:application/x-www-form-urlencoded;charset=UTF-8',
'content' => $stringData
),
// 解決SSL證照驗證失敗的問題
"ssl"=>array(
"verify_peer"=>false,
"verify_peer_name"=>false,
)
);
$context = stream_context_create($options);
$data = file_get_contents($url, false, $context);
本作品採用《CC 協議》,轉載必須註明作者和本文連結