我正在尝试按照示例here
开发示例facebook php登录示例我托管了我的应用here,但每当我尝试访问该链接时,我都会在问题中收到错误消息。这是抛出错误的代码段
try {
$e = new FacebookApiException(array(// LINE 887
'error_code' => curl_errno($ch),
'error' => array(
'message' => curl_error($ch),
'type' => 'CurlException',
),
));
curl_close($ch);
}
// edit suggested by Kneel-before ZOD
catch(FacebookApiException $e) {
$result = $e->getResult();
echo 'Got an : ', $e->getType(),' while posting';
echo(json_encode($result));
}
catch(Exception $e){
echo 'Caught exception: ', $e->getMessage(), "\n";
}
我非常确定我已经在index.php中正确设置了APP ID和密码。
以下是我在Facebook
上设置应用的屏幕截图任何帮助将不胜感激。谢谢!
答案 0 :(得分:1)
您可能需要为Facebook提供curl证书文件,您可以这样做:
从https://github.com/facebookarchive/facebook-php-sdk/blob/master/src/fb_ca_chain_bundle.crt
下载证书文件并在尝试任何Facebook通话之前添加此内容
facebook::$CURL_OPTS[CURLOPT_CAINFO] = 'path/to/fb_ca_chain_bundle.crt';
您也可以尝试
facebook::$CURL_OPTS[CURLOPT_SSL_VERIFYPEER] = false;
facebook::$CURL_OPTS[CURLOPT_SSL_VERIFYHOST] = 2;
答案 1 :(得分:0)
为什么要在try块上创建例外?
我当前的工作登录功能是这样的:
public function login()
{
$this->load->library('facebook/facebook',$config);
$uid = $this->facebook->getUser();
if ($uid)
{
try
{
$user_profile = $this->facebook->api('/' . $uid);
//then redirect to whatever you need..
}
catch (FacebookApiException $e)
{ error_log($e);
$uid = null;
$this->facebook->destroySession();
}
}
else
{
$params = array(
'canvas' => 1,
'fbconnect' => 0,
'scope' => 'email',
);
echo "<script>top.location.href='" . $this->facebook->getLoginUrl($params)."'</script>";
exit();
}
}
答案 2 :(得分:0)
我遇到了和你一样的问题。
我在base_facebook.php
中的curl_exec()
之前添加了此选项
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
答案 3 :(得分:0)
如果您使用免费托管,我认为它可能无法正常工作,主要是因为它们通常会禁用传出连接。我也遇到过这个问题,代码在付费托管(或启用传出连接)上运行顺畅。
答案 4 :(得分:0)
您正在try ... catch块中创建一个例外。你不需要做这些事情。 try-catch块设计用于处理可能在您的应用程序中引发异常的代码段。 您需要将可能引发异常的块代码段放入其中。在您的情况下,它可能是对Facebook API的cURL请求。
答案 5 :(得分:0)
它与您的代码无关。 Curl根本无法连接到facebook图谱API。这可能是因为您的主机阻止了与其他主机的传出连接,或者Facebook阻止了您的主机。
如果您有ssh访问权限,可以尝试访问http://graph.facebook.com和/或检查您的php日志。否则你应该问你的主人。
答案 6 :(得分:0)
链接为https您可能需要提供证书信息,如果您无法访问证书然后添加
,则curl通常会抛出错误curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
将允许访问任何证书。
答案 7 :(得分:0)
##在base_facebook.php中找到代码##
public static $CURL_OPTS = array(
CURLOPT_CONNECTTIMEOUT => 10,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 60,
CURLOPT_USERAGENT => 'facebook-php-3.2',
);
添加选项
public static $CURL_OPTS = array(
CURLOPT_CONNECTTIMEOUT => 10,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 60,
CURLOPT_USERAGENT => 'facebook-php-3.2',
CURLOPT_PROXY => '199.200.120.140:8089',
);
答案 8 :(得分:0)
根据Ashutosh Bajpay的建议,您的网络服务器很可能无法根据错误消息进行连接。如果您使用的是共享托管服务提供商,或启用了SELinux,那么您的代码将无法启动新连接,这是非常合理的。
你可以编写一个快速而肮脏的脚本来测试这个理论:
$page = file_get_contents('http://google.com');
(!empty($page)) ? var_dump($page) : print_r(error_get_last());
如果脚本可以连接,您将获得页面转储,否则您应该看到它尝试访问主机时出错。
如果您确实控制了该框,并且恰好运行了SELinux,则会提供一些有用的提示here。
答案 9 :(得分:0)
检查php.ini
允许卷曲功能。对于ubuntu,请在终端中尝试此代码
sudo apt-get install php5-curl
使用
重启Apache服务器后 sudo service apache2 restart
答案 10 :(得分:0)
您正在捕获两个异常类型,也不是“抛出”的异常。尝试捕获引发的异常,并在该异常块中,您将能够进一步调试您的问题(例如在异常期间显示正在播放的变量......)然后您可以构建一个简单的页面来测试每个部分直到你解决它为止。