it-swarm.com.ru

Ошибка: класс 'Facebook\FacebookSession' не найден в Facebook 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 Минимальный пример ), но это не помогает.

Откуда это комм?

10
Paul Fournel

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

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

require_once( 'Facebook/FacebookSession.php' );

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

14
Paul Fournel
  1. Требуется PHP версии 5.4.0 или выше.
  2. Facebook использует реализации PSR-4 . Следовательно, вам не нужно использовать require или require_once или include или include_once.
  3. В PSR-4 вам просто нужно имя пакета (пространство имен), т. Е. Только имя каталога и имя файла класса. Он будет динамически регистрировать классы с заданным именем пакета. Ex.:- use packaname\classname.
  4. Вы найдете файл autoload.php в Facebook SDK Autoload корневой каталог.
  5. use используется для загрузки динамических классов с использованием 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');
20
rajesh ujade

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

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>';
}
3
www.amitpatil.me

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

Я не вижу "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;
<...>

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

3
Darius Miliauskas
require_once 'Facebook/autoload.php';
$fb = new Facebook\Facebook([
  'app_id' => '{app_id}',
  'app_secret' => '{app_secret}',
  'default_graph_version' => 'v2.2',
]);

-просто добавьте этот код. он работает . введите ваш app_id и app_secret вашего FacebookAPP 

0
Gaurav

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

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

и вы сделали.

0
Arvind Bhardwaj