致命错误:未捕获的 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 962
Fatal 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