Intereting Posts
Выберите в раскрывающемся меню и перезагрузите страницу Уменьшить 5 дней с даты post vs. put при отправке формы Возможно ли, что mysqli_insert_id вернет неверный идентификатор в приложениях с высоким трафиком? Почему PHP не принимает команду с аргументом $ 1 Как установить PHP для загрузки файла в конкретный каталог? Преобразование однобайтовой строки в строку с двумя байтами как я могу генерировать все возможные результаты динамически загруженной базы данных? Имя двоеточия PHP в имени свойства Невозможно получить доступ к самому себе :: если класс класса не активен как получить ошибку wp в пользовательской форме входа Перезапись MVC htaccess Преобразование массива массивов PHP в C # Запрошенный PHP-расширение intl отсутствует в вашей системе (SonataAdminBundle) в Symfony2 QBXML: добавьте счет-фактуру в онлайн-учетную запись быстрой онлайн-книги с QBOE App / QBXML

Ошибка: класс «Facebook \ FacebookSession» не найден с помощью фанкойла PHP SDK

Мне сложно документировать документацию к SDK от facebook. Я загрузил SDK из Github и добавил его в свой PHP-проект.

Вот файловая система:

├── Facebook   │  ├── FacebookAuthorizationException.php   │  ├── FacebookCanvasLoginHelper.php   │  ├── FacebookClientException.php   │  ├── FacebookJavaScriptLoginHelper.php   │  ├── FacebookOtherException.php   │  ├── FacebookPermissionException.php   │  ├── FacebookRedirectLoginHelper.php   │  ├── FacebookRequest.php   │  ├── FacebookRequestException.php   │  ├── FacebookResponse.php   │  ├── FacebookSDKException.php   │  ├── FacebookServerException.php   │  ├── FacebookSession.php   │  ├── FacebookThrottleException.php   │  ├── GraphLocation.php   │  ├── GraphObject.php   │  ├── GraphSessionInfo.php   │  ├── GraphUser.php   │  └── fb_ca_chain_bundle.crt   └── test.php 

вот мой код:

 use Facebook\FacebookSession; use Facebook\FacebookRequest; use Facebook\GraphUser; use Facebook\FacebookRequestException; FacebookSession::setDefaultApplication('*******','******'); $helper = new FacebookRedirectLoginHelper('http://isgeek.eu/fb/FaRepost/return.php'); $loginUrl = $helper->getLoginUrl(); // Use the login url on a link or button to redirect to Facebook for authentication 

Я получаю эту ошибку

 Fatal error: Class 'Facebook\FacebookSession' not found in /homepages/2/d184071366/htdocs/isgeek/fb/FaRepost/test.php on line 9 

При обновлении моей версии PHP, так что проблема не идет отсюда. Похоже, что файлы PHP не найдены. Я прочитал этот вопрос ( Facebook SDK v4 для минимального примера PHP ), но это не помогает.

Откуда это происходит?

  1. Требуется PHP версии 5.4.0 или выше.
  2. Facebook использует Реализации PSR-4 . Следовательно, вам не нужно использовать require или require_once или include или include_once .
  3. В PSR-4 вам просто нужно указать имя пакета (namespace), то есть имя каталога и имя файла класса. Он будет динамически регистрировать классы из данного имени пакета .Ex.:- use packaname\classname .
  4. Файл autoload.php вы найдете в корневой директории Facebook SDK Autoload .
  5. используется для загрузки динамических классов с использованием spl_autoload_register
  6. Facebook регистрирует всю библиотеку, используя autoload.php или autoload_fb.php
  7. Вы должны найти autoload.php в своей загруженной библиотеке, например facebook-php-sdk-v4-4.0-dev/ .
  8. Если вы просто хотите использовать библиотеку Facebook из источника загрузки. Затем вам нужно скопировать файл autoload.php в корневой каталог или в каталог Facebook.
  9. определенная константа для FACEBOOK_SDK_V4_SRC_DIR т.е. путь библиотеки facebook
  10. Вы должны сделать так, как показано ниже, для использования в php

Примечание. Я скопировал /var/www/stack/24006673/facebook-php-sdk-v4-4.0-dev/src/Facebook каталог и /var/www/stack/24006673/facebook-php-sdk-v4-4.0-dev/autoload.php в корневом каталоге /var/www/stack/24006673/

 define('FACEBOOK_SDK_V4_SRC_DIR','/var/www/stack/24006673/Facebook/'); require_once("autoload.php"); use Facebook\FacebookSession; use Facebook\FacebookRequest; use Facebook\GraphUser; use Facebook\FacebookRequestException; use Facebook\FacebookRedirectLoginHelper; FacebookSession::setDefaultApplication('YOUR_APP_ID','YOUR_APP_SECRET'); 

Я нашел решение здесь

Я не кодировал php в течение некоторого времени, и все изменилось. use Facebook\FacebookSession; недостаточно. Вам также нужно добавить require_once .

 require_once( 'Facebook/FacebookSession.php' ); 

Изменить: для более детального решения, пожалуйста, ознакомьтесь с приведенным ниже ответом.

Этот код работал для меня

 session_start(); require_once( 'Facebook/FacebookSession.php' ); require_once( 'Facebook/FacebookRedirectLoginHelper.php' ); require_once( 'Facebook/FacebookRequest.php' ); require_once( 'Facebook/FacebookResponse.php' ); require_once( 'Facebook/FacebookSDKException.php' ); require_once( 'Facebook/FacebookRequestException.php' ); require_once( 'Facebook/FacebookAuthorizationException.php' ); require_once( 'Facebook/GraphObject.php' ); require_once( 'Facebook/Entities/AccessToken.php' ); require_once( 'Facebook/HttpClients/FacebookHttpable.php' ); require_once( 'Facebook/HttpClients/FacebookCurlHttpClient.php' ); require_once( 'Facebook/HttpClients/FacebookCurl.php' ); use Facebook\FacebookSession; use Facebook\FacebookRedirectLoginHelper; use Facebook\FacebookRequest; use Facebook\FacebookResponse; use Facebook\FacebookSDKException; use Facebook\FacebookRequestException; use Facebook\FacebookAuthorizationException; use Facebook\GraphObject; use Facebook\Entities\AccessToken; use Facebook\HttpClients\FacebookHttpable; use Facebook\HttpClients\FacebookCurlHttpClient; use Facebook\HttpClients\FacebookCurl; // init app with app id (APPID) and secret (SECRET) FacebookSession::setDefaultApplication('XXXX', 'XXXXXXXXXXXX'); // login helper with redirect_uri $helper = new FacebookRedirectLoginHelper( 'http://localhost/demo/demo2/demo2.php' ); try { $session = $helper->getSessionFromRedirect(); } catch( FacebookRequestException $ex ) { // When Facebook returns an error } catch( Exception $ex ) { // When validation fails or other local issues } // see if we have a session if ( isset( $session ) ) { // graph api request for user data $request = new FacebookRequest( $session, 'GET', '/me' ); $response = $request->execute(); // get response $graphObject = $response->getGraphObject(); // print data echo print_r( $graphObject, 1 ); } else { // show login url echo '<a href="' . $helper->getLoginUrl() . '">Login</a>'; } 

Вы должны быть осторожны со всеми путями!

Я не вижу «autoload.php» в вашей файловой системе. В моем случае я помещаю содержимое PHP SDK в каталог «fb» и использую пути (добавленный DIR . В строку «define» по сравнению с примером https://developers.facebook.com/docs/php /gettingstarted/4.0.0 )

 define('FACEBOOK_SDK_V4_SRC_DIR', __DIR__ . '/fb/src/Facebook/'); require __DIR__ . '/fb/autoload.php'; echo FACEBOOK_SDK_V4_SRC_DIR; //to check if the paths are correct use Facebook\FacebookSession; use Facebook\FacebookRequest; use Facebook\GraphUser; use Facebook\FacebookRequestException; <...> 

Это помогло избежать такой ошибки.

Переименуйте все файлы и каталоги Facebook в нижний регистр. Автоматическая загрузка на * nix автоматически уменьшает имена всех файлов.

Не нужно использовать require или include . Я решил это. Просто используйте следующую строку вверху вашего скрипта:

 define('FACEBOOK_SDK_V4_SRC_DIR', __DIR__ . '/facebook-php-sdk-v4/src/Facebook/'); 

и все готово.