我正在尝试使用以下代码获取我的FB应用访问令牌:
$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网址上。 allow_url_fopen已开启。
更新2:好像是防火墙问题。当我通过SSH登录服务器时,我无法忘记任何https url。我已要求他们打开443端口。
答案 0 :(得分: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>';
?>
如果ok将得到输出:
openssl: isload
http: ok
https: ok
答案 1 :(得分:0)
尝试增加超时限制:
<?php
$context = stream_context_create(array(
'http' => array(
'timeout' => 60
)
)
);
file_get_contents("http://example.com/", 0, $context);
?>
答案 2 :(得分: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);
?>