file_get_contents無法請求https連接的解決方法

發布時間:2018年09月01日      浏覽次數:563 次
PHP.ini默認配置下(xià),用file_get_contents讀取https的鏈接,就會如下(xià)錯誤:

Warning: fopen() [function.fopen]: Unable to find the wrapper “https” – did you forget to enable it when you configured PHP?

解決方案有3:

1.windows下(xià)的PHP,隻需要到php.ini中(zhōng)把extension=php_openssl.dll前面的;删掉,重啓服務就可以了。
2.linux下(xià)的PHP,就必須安裝openssl模塊,安裝好了以後就可以訪問了。

安裝方法


OpenSSL庫的安裝

官網:http://www.openssl.org

下(xià)載頁面:http://www.openssl.org/source/

選擇最新版本下(xià)載

http://www.openssl.org/source/openssl-1.0.0a.tar.gz

解壓:

tar –zxvf openssl-1.0.0d.tar.gz,解壓目錄爲:openssl-1.0.0d

然後進入到 cd openssl-1.0.0d,進行配置、編譯、安裝

配置

./configure或./config

編譯

make

安裝

make install



3.如果服務器你不能修改配置的話(huà),那麽就使用curl函數來替代file_get_contents函數,當然不是簡單的替換啊。還有相應的參數配置才能正常使用curl函數。

對curl函數封裝如下(xià):


function http_request($url,$timeout=30,$header=array()){
if (!function_exists('curl_init')) {
throw new Exception('server not install curl');
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
if (!empty($header)) {
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
}
$data = curl_exec($ch);
list($header, $data) = explode("rnrn", $data);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($http_code == 301 || $http_code == 302) {
$matches = array();
preg_match('/Location:(.*?)n/', $header, $matches);
$url = trim(array_pop($matches));
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
$data = curl_exec($ch);
}

if ($data == false) {
curl_close($ch);
}
@curl_close($ch);
return $data;
}
免責聲明:本站相關技術文章信息部分(fēn)來自網絡,目的主要是傳播更多信息,如果您認爲本站的某些信息侵犯了您的版權,請與我(wǒ)(wǒ)們聯系,我(wǒ)(wǒ)們會即時妥善的處理,謝謝合作!