2012-12-23 127 views
0

的file_get_contents我嘗試使用下面的代碼讓我的FB應用程序的訪問令牌:服務器無法在HTTPS

$app_token_url = "https://graph.facebook.com/oauth/access_token?" 
. "client_id=" . $app_id 
. "&client_secret=" . $app_secret 
. "&grant_type=client_credentials"; 
$response = file_get_contents($app_token_url); 
$params = null; 
parse_str($response, $params); 

echo("This app's access token is: " . $params['access_token']); 

它工作正常,從localhost而不是從我的服務器(連接超時)。 openssl庫根據phpinfo()啓用。

更新:問題似乎發生在任何https URL上。 allow_url_fopen已打開。

更新2:它似乎是一個防火牆問題。當我通過SSH登錄服務器時,我無法訪問任何https網址。我問他們打開443端口

回答

0

嘗試增加超時限制:

<?php 
$context = stream_context_create(array( 
    'http' => array( 
     'timeout' => 60 
     ) 
    ) 
); 
file_get_contents("http://example.com/", 0, $context); 
?> 
+0

謝謝,但不起作用。很明顯,問題發生在任何https網址(可以正常使用http url) – arnaudrg

2

嘗試檢查您的OpenSSL可以在你的服務器封裝器數據或不?

代碼來檢查:

<?php 
$check = stream_get_wrappers(); 
echo 'openssl: ', extension_loaded ('openssl') ? 'isload':'noload','<br>'; 
echo 'http: ', in_array('http', $check) ? 'ok':'no','<br>'; 
echo 'https: ', in_array('https', $check) ? 'ok':'no','<br>'; 
?> 

如果確定會得到輸出:

openssl: isload 
http: ok 
https: ok 
+0

謝謝,我完全得到這個輸出。其實我只是嘗試通過SSH在我的服務器上執行一個簡單的wget,事實證明,我不能wget任何https網址。顯然,我的主機只是阻止了端口443.我要求他們打開它。 – arnaudrg

+1

Hehehehehee網絡問題 – 2012-12-24 00:30:43

0
<?php 

$url = 'https://www.google.com.eg'; 

function curl_get_contents($url){ 
    $ch = curl_init($url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
    $data = curl_exec($ch); 
    curl_close($ch); 
    return $data; 
} 
echo curl_get_contents($url); 
?> 
+1

感謝您的回答。請記住,添加答案時有一點解釋很長。最初的提問者可能不會從代碼中得到很多答案,如果你解釋了你的答案是如何解決問題的,那麼新的提問者可以獲得更多。 – Brody

相關問題