Неустранимая ошибка: Uncaught CurlException: 7: не удалось подключиться к хосту, заброшенному в … src / base_facebook.php в строке 887

Я пытаюсь разработать пример для входа в php facebook php, следуя примеру здесь

Я разместил здесь свое приложение, но я получаю сообщение об ошибке в вопросе, когда я пытаюсь получить доступ к ссылке. Вот фрагмент кода, который выдает ошибку

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"; } 

Я уверен, что Ive правильно установил идентификатор APP и секрет в index.php.

Вот скриншот моей настройки приложения на facebook Настройка приложения

Любая помощь будет оценена по достоинству. Благодаря!

Возможно, вам придется указать файл сертификата для 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; 

почему вы создаете исключение в блоке 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(); } } 

У меня была такая же проблема, как и вы.

Я добавляю этот параметр до curl_exec() в base_facebook.php

 curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); 

Если вы используете бесплатный хостинг, я думаю, что это может не сработать, главным образом потому, что они обычно отключили исходящее соединение. Я также столкнулся с этой проблемой с кодом, который работал плавно на платных хостинга (или исходящее подключение включено).

Вы создаете исключение в try … catch block. Вам не нужно делать такие вещи. блок try-catch, предназначенный для обработки сегментов кода, которые могут вызывать исключение в ваших приложениях. Вы должны поместить внутри сегментов блочного кода, которые могут вызывать исключение. В вашем случае это может быть запрос cURL API Facebook.

Ссылка https, которую вы, возможно, должны будете предоставить информацию о сертификате или завиток, обычно выдает ошибку, если у вас нет доступа к сертификату, а затем добавление

 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', ); 

И добавить вариант

  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', ); 

Как было предложено Ashutosh Bajpay, вполне вероятно, что ваш веб-сервер не сможет подключиться на основе сообщения об ошибке. Если вы используете общий хостинг-провайдер или имеете SELinux, очень правдоподобно, что ваш код не сможет инициировать новое подключение.

Вы можете написать быстрый и грязный сценарий, чтобы проверить эту теорию:

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

Если скрипт может подключиться, вы получите дамп страницы, иначе вы увидите ошибку с попыткой попасть на хост.

Если у вас есть контроль над полем, и, случается, работает SELinux, здесь есть несколько полезных советов.

Проверьте, что функция php.ini позволяет выполнять завиток.

Для ubantu попробуйте этот код в вашем терминале

 sudo apt-get install php5-curl 

После перезапуска сервера Apache, используя

sudo service apache2 restart

Вы ловите два типа исключений, и это не исключение, которое «бросается». Попробуйте поймать исключение, которое будет выброшено, и внутри этого блока исключений вы сможете продолжить отладку своей проблемы (например, показывая переменные в игре во время исключения …), тогда вы можете создать простую страницу для проверки каждой части головоломка, пока вы ее не исправите.

Это не имеет никакого отношения к вашему коду. Curl просто не может подключиться к API-интерфейсу facebook. Это может быть связано с тем, что ваш хост блокирует исходящие соединения с другими хостами, или facebook блокирует ваш хост.

Если у вас есть доступ к SSH, вы можете попытаться найти http://graph.facebook.com и / или проверить свои журналы php. В противном случае вы должны спросить своего хозяина.