致命错误:未捕获卷曲异常:7:无法';t连接到第887行中抛出的主机…src/base_facebook.php
我正试图按照下面的示例开发一个facebook php登录示例 我已经托管了我的应用程序,但每当我尝试访问链接时,都会收到问题中的错误消息。下面是抛出错误的代码段致命错误:未捕获卷曲异常:7:无法';t连接到第887行中抛出的主机…src/base_facebook.php,php,facebook,facebook-graph-api,oauth-2.0,facebook-php-sdk,Php,Facebook,Facebook Graph Api,Oauth 2.0,Facebook Php Sdk,我正试图按照下面的示例开发一个facebook php登录示例 我已经托管了我的应用程序,但每当我尝试访问链接时,都会收到问题中的错误消息。下面是抛出错误的代码段 try { $e = new FacebookApiException(array(// LINE 887 'error_code' => curl_errno($ch), 'error' => array( 'message' =>
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中正确设置了应用程序ID和密码
这是我在facebook上安装应用程序的截图
任何帮助都将不胜感激。谢谢 为什么要在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();
}
}
公共函数登录()
{
$this->load->library('facebook/facebook',$config);
$uid=$this->facebook->getUser();
如果($uid)
{
尝试
{
$user_profile=$this->facebook->api('/'.$uid);
//然后重定向到您需要的任何内容。。
}
捕获(FacebookApiException$e)
{错误日志($e);
$uid=null;
$this->facebook->destroySession();
}
}
其他的
{
$params=数组(
“画布”=>1,
“fbconnect”=>0,
“范围”=>“电子邮件”,
);
echo“top.location.href=”$this->facebook->getLoginUrl($params)。“;
退出();
}
}
我和你有同样的问题
我在base\u facebook.php中的curl\u exec()
之前添加了此选项
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
如果你使用的是免费主机,我认为它可能不会起作用,主要是因为它们通常会禁用传出连接。我也遇到了这个问题,因为代码在付费主机上运行得很顺利(或启用了传出连接)。您在try中创建了一个异常。。。挡块。你不需要做这样的事情。尝试catch块,该块用于处理可能在应用程序中引发异常的代码段。
您需要将可能引发异常的块代码段放入其中。在您的情况下,它可能是对Facebook API的一个cURL请求。它与您的代码无关。Curl根本无法连接到facebook graph API。这可能是因为您的主机正在阻止与其他主机的传出连接,或者facebook正在阻止您的主机
如果您有ssh访问权限,您可以尝试访问和/或检查php日志。否则,您应该询问您的主机。链接是https,您可能必须提供证书信息,否则如果您没有访问证书的权限,curl通常会抛出错误,然后添加
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
将允许访问任何证书。设置代理以连接Facebook.com
##在base_facebook.php中查找代码##
并添加选项
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',
);
您可能需要为curl提供一个Facebook证书文件,您可以这样做:
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();
}
}
从下载证书文件
并在尝试任何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;
正如Ashutosh Bajpay所建议的,您的web服务器可能无法根据错误消息进行连接。如果您使用的是共享主机提供程序,或者启用了SELinux,那么您的代码很可能无法启动新的连接 您可以编写一个快速而肮脏的脚本来测试此理论:
$page = file_get_contents('http://google.com');
(!empty($page)) ? var_dump($page) : print_r(error_get_last());
如果脚本可以连接,您将获得页面的转储,否则您将看到它试图访问主机时出错
如果您确实控制了该框,并且它恰好运行了SELinux,那么有一些有用的提示。检查您的
php.ini
允许使用curl函数
对于ubantu,请尝试在终端中输入此代码
sudo apt-get install php5-curl
之后,使用以下命令重新启动apache服务器:
sudo service apache2 restart
您正在捕获两种异常类型,被“抛出”的异常也不是。尝试捕获抛出的异常,在该异常块中,您将能够进一步调试您的问题(例如,在异常期间显示正在运行的变量…),然后您可以构建一个简单的页面来测试拼图的每个部分,直到您修复它。您检查了主机的URL吗?@跪在ZOD面前。我不明白你的意思?AFAI看,主机
url是。我在这里遗漏了什么吗?FBAPI中的主机是否匹配http://cse591.host56.com/?没关系;图像回答了这个问题。检查错误的位置并粘贴内容。@Kneel Before ZOD:i在问题中发布了相关的代码行。请注意,错误是从库文件而不是我的客户端代码中抛出的。我的客户机代码与上面的文件类似。是基于base_facebook.php的哪个函数?我在档案里找不到那些行。确保您使用的是最新版本。是。我刚刚使用了facebook的php-sdk页面上的最新版本,它给了我解析错误:语法错误,在第20行的/home/a8815401/facebook/src/base_facebook.php中出现意外的T_。这是第20行的代码curl_exec(),如果(!function_exists('curl_init')){//line20抛出新的异常('Facebook需要curl PHP扩展。;)}
我在第962行添加了这个选项。我在前一行删除了它,并在第962行添加了它。我现在收到一个警告和一个错误<代码>警告:curl_setopt()[function.curl setopt]:第962行/home/a8815401/facebook/src/base_facebook.php中的curl配置选项无效。致命错误:未捕获的curl异常:7:无法连接到第994行/home/a8815401/facebook/src/base_facebook.php中抛出的主机。有什么想法吗?