致命错误:未捕获的 CurlException:7:无法连接到第 887 行 ....src/base_facebook.php 中抛出的主机

Posted

技术标签:

【中文标题】致命错误:未捕获的 CurlException:7:无法连接到第 887 行 ....src/base_facebook.php 中抛出的主机【英文标题】:Fatal error: Uncaught CurlException: 7: couldn't connect to host thrown in ....src/base_facebook.php on line 887 【发布时间】:2013-09-22 18:58:21 【问题描述】:

我正在尝试按照示例 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 和 secret。

这是我在 facebook 上设置应用程序的屏幕截图

任何帮助将不胜感激。谢谢!

【问题讨论】:

你检查过host的网址吗? @Kneel-Before-ZOD。我不明白你吗? AFAI 看到,host 网址是 cse591.host56.com。我在这里错过了什么吗? FB API 中的 host 是否匹配 http://cse591.host56.com/ 没关系;图片回答了这个问题。检查错误位置并粘贴内容。 @Kneel-Before-ZOD:我已经在问题中发布了相关代码行。请看一下 【参考方案1】:

您可能需要为 Facebook 提供一个证书文件,您可以这样做:

从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;

【讨论】:

【参考方案2】:

为什么要在 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();
    

【讨论】:

错误是从库文件而不是我的客户端代码中抛出的。我的客户端代码和你上面的文件类似。 嗯嗯。它在base_facebook.php 上哪个函数?我在我的文件中找不到这些行。确保您使用的是最新版本。 是的。我刚刚使用了来自 facebook 的 php -sdk 页面的最新版本【参考方案3】:

我和你有同样的问题。

我在 base_facebook.php 中的 curl_exec() 之前添加了这个选项

curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);

【讨论】:

这给了我Parse error: syntax error, unexpected T_IF in /home/a8815401/facebook/src/base_facebook.php on line 20。这是第 20 行的代码curl_exec() if (!function_exists('curl_init')) //line20 throw new Exception('Facebook needs the CURL PHP extension.'); 我将此选项添加到第 962 行。base_facebook.php 我在前一行删除了它并在第 962 行添加了它。我现在收到一个警告和一个错误。 Warning: curl_setopt() [function.curl-setopt]: Invalid curl configuration option in /home/a8815401/facebook/src/base_facebook.php on line 962Fatal error: Uncaught CurlException: 7: couldn't connect to host thrown in /home/a8815401/facebook/src/base_facebook.php on line 994。有什么想法吗? 000webhost.com/forum/customer-assistance/…【参考方案4】:

如果您使用免费托管,我认为它可能无法正常工作,主要是因为他们通常禁用传出连接。在付费托管(或启用传出连接)上运行顺畅的代码我也遇到过这个问题。

【讨论】:

【参考方案5】:

您正在 try ... catch 块中创建异常。你不需要做这样的事情。 try-catch 块旨在处理可能在应用程序中引发异常的代码段。 您需要在此块内放入可以引发异常的代码段。在您的情况下,它可能是对 Facebook API 的 cURL 请求。

【讨论】:

【参考方案6】:

链接是 https,您可能需要提供证书信息,否则如果您无权访问证书然后添加,curl 通常会抛出错误

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

将允许访问任何证书。

【讨论】:

【参考方案7】:

设置代理以连接 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',
      );

并添加选项

  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】:

根据 Ashutosh Bajpay 的建议,根据错误消息,您的网络服务器可能无法连接。如果您使用的是共享托管服务提供商,或者启用了 SELinux,那么您的代码很可能无法发起新的连接。

您可以编写一个快速而肮脏的脚本来测试这个理论:

$page = file_get_contents('http://google.com');
(!empty($page)) ? var_dump($page) : print_r(error_get_last());

如果脚本可以连接,您将获得该页面的转储,否则您应该会在尝试访问主机时看到错误。

如果您确实控制了该机器,并且它恰好在运行 SELinux,那么有一些有用的提示 here。

【讨论】:

【参考方案9】:

检查您的php.ini 是否允许使用 curl 功能。

对于 ubantu,请在终端中尝试此代码

sudo apt-get install php5-curl

在它重新启动你的 apache 服务器之后使用

sudo service apache2 restart

【讨论】:

【参考方案10】:

您正在捕获两种异常类型,“抛出”的异常也不是。尝试捕获抛出的异常,在该异常块中,您将能够进一步调试您的问题(例如在异常期间显示正在运行的变量......)然后您可以构建一个简单的页面来测试每个部分拼图,直到你解决它。

【讨论】:

【参考方案11】:

这与您的代码无关。 Curl 根本无法连接到 facebook graph API。这可能是因为您的主机阻止了与其他主机的传出连接,或者 facebook 阻止了您的主机。

如果您有 ssh 访问权限,您可以尝试访问 http://graph.facebook.com 和/或检查您的 php 日志。否则你应该问你的主人。

【讨论】:

以上是关于致命错误:未捕获的 CurlException:7:无法连接到第 887 行 ....src/base_facebook.php 中抛出的主机的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 7致命错误:未捕获的RuntimeException:尚未设置外观根

PHP 致命错误:未捕获的错误:使用 Laravel 5.8 和 PHP 7.4 调用未定义函数 Whoops\Exception\xdebug_is_enabled()

PHP 致命错误:未捕获的错误:在 PHP 7.2.13 上调用未定义函数 idn_to_ascii()

致命错误:未捕获的错误:调用 C:\xampp\htdocs\DBtest\sqlsrv.php:7 中的函数 sqlsrv_connect() 堆栈跟踪:#0 main SQLSERVER

Facebook PHP SDK 报错

致命错误:未捕获的错误:未找到“Omnipay\Omnipay”类