Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Error: Class 'Facebook\FacebookSession' not found with the facebook PHP SDK

I am having a hard time with facebook's SDK documentation. I downloaded the SDK from Github and added it into my PHP project.

Here is the file system:

   ├── 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

here is my code so far:

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

I get this error

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

At updated my PHP version, so the issue does not comme from here. It seems like the PHP files are not found. I read this question (Facebook SDK v4 for PHP Minimal Example) but it does not help.

Where does this comme from?

like image 587
Paul Fournel Avatar asked May 09 '14 16:05

Paul Fournel


3 Answers

  1. PHP Version 5.4.0 or higher is required.
  2. Facebook uses Implementations of PSR-4. Hence You dont have to use require or require_once or include or include_once.
  3. In PSR-4, you just need packagename(namespace) i.e. directory name and class file name only.It will register classes dynamically from given package name.Ex.:- use packaname\classname.
  4. You will find the file autoload.php in Facebook SDK Autoload root directory.
  5. use is used to load dynamic classes using spl_autoload_register
  6. Facebook register all library using autoload.php or autoload_fb.php
  7. You have to find autoload.php in your downloaded library like facebook-php-sdk-v4-4.0-dev/.
  8. If you just wants to use Facebook library from download source.Then you have to copy autoload.php in your root directory or in Facebook directory.
  9. defined constant for FACEBOOK_SDK_V4_SRC_DIR i.e. path of the facebook library
  10. You need to do as below to use in php

Note: I have copied /var/www/stack/24006673/facebook-php-sdk-v4-4.0-dev/src/Facebook directory and /var/www/stack/24006673/facebook-php-sdk-v4-4.0-dev/autoload.php file in root directory /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');
like image 82
Rajesh Ujade Avatar answered Oct 30 '22 22:10

Rajesh Ujade


I found the solution here

I did not code in php for some time now and things have changed. use Facebook\FacebookSession; is not enough. You need to add a require_once too.

require_once( 'Facebook/FacebookSession.php' );

Edit: for a more detailed solution, please checkout the answer below.

like image 44
Paul Fournel Avatar answered Oct 30 '22 22:10

Paul Fournel


This code worked for me

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>';
}
like image 3
www.amitpatil.me Avatar answered Oct 31 '22 00:10

www.amitpatil.me