Ubuntu18.04 下 lnmp 包使用過程中 curl https 請求出現 502

phpdi發表於2018-11-23

問題原因

檢視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 協議》,轉載必須註明作者和本文連結

相關文章