web-dev-qa-db-ger.com

Fehler: Die Klasse 'Facebook\FacebookSession' wurde nicht mit dem Facebook gefunden PHP SDK

Ich habe Schwierigkeiten mit der SDK-Dokumentation von Facebook. Ich habe das SDK von Github heruntergeladen und in mein PHP - Projekt eingefügt.

Hier ist das Dateisystem:

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

hier ist mein code soweit:

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

Ich bekomme diesen Fehler

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

Bei der Aktualisierung meiner PHP -Version ist das Problem hier nicht enthalten. Es scheint, als würden die Dateien PHP nicht gefunden. Ich habe diese Frage gelesen ( Facebook SDK v4 für PHP Minimal Example ), aber es hilft nicht.

Woher kommt dieser Comme?

10
Paul Fournel

Ich habe die Lösung gefunden hier

Ich habe seit einiger Zeit nicht in PHP geschrieben und die Dinge haben sich geändert. use Facebook\FacebookSession; reicht nicht aus. Sie müssen auch einen require_once hinzufügen.

require_once( 'Facebook/FacebookSession.php' );

Bearbeiten: Für eine detailliertere Lösung überprüfen Sie bitte die Antwort unten.

14
Paul Fournel
  1. PHP Version 5.4.0 oder höher ist erforderlich.
  2. Facebook verwendet Implementierungen von PSR-4 . Daher müssen Sie nicht required oder requir_once oder include oder include_once verwenden.
  3. In PSR-4 benötigen Sie nur Paketnamen (Namespace), d. H. Nur Verzeichnisnamen und Klassendateinamen. Klassen werden dynamisch vom angegebenen Paketnamen registriert.Ex.:- use packaname\classname.
  4. Sie finden die Datei autoload.php im Verzeichnis Facebook SDK Autoload root.
  5. use wird verwendet, um dynamische Klassen mit spl_autoload_register zu laden.
  6. Facebook registrieren alle Bibliotheken mit autoload.php oder autoload_fb.php
  7. Sie müssen autoload.php in Ihrer heruntergeladenen Bibliothek wie facebook-php-sdk-v4-4.0-dev/ finden.
  8. Wenn Sie nur die facebook -Bibliothek von der Downloadquelle verwenden möchten, müssen Sie autoload.php in Ihr Stammverzeichnis oder in das Facebook-Verzeichnis kopieren. 
  9. definierte Konstante für FACEBOOK_SDK_V4_SRC_DIR, also Pfad der Facebook-Bibliothek
  10. Sie müssen wie folgt vorgehen, um use in PHP zu verwenden

Hinweis: Ich habe /var/www/stack/24006673/facebook-php-sdk-v4-4.0-dev/src/Facebook Verzeichnis und /var/www/stack/24006673/facebook-php-sdk-v4-4.0-dev/autoload.php Datei im Stammverzeichnis /var/www/stack/24006673/ kopiert.

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

Dieser Code hat für mich funktioniert 

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

Sie sollten mit allen Pfaden vorsichtig sein!

Ich kann "autoload.php" nicht in Ihrem Dateisystem sehen. In meinem Fall stelle ich den Inhalt von PHP SDK in das Verzeichnis "fb" und verwende die Pfade (hinzugefügt DIR.) In der Zeile "define" im Vergleich zum Beispiel von 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;
<...>

Es half, diesen Fehler zu vermeiden.

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

- fügen Sie einfach diesen Code hinzu .it funktioniert . Geben Sie Ihre app_id und app_secret Ihrer facebookAPP ein 

0
Gaurav

Keine Notwendigkeit, require oder include..__ zu verwenden. Ich habe es gelöst. Verwenden Sie einfach die folgende Zeile oben in Ihrem Skript:

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

und du bist fertig.

0
Arvind Bhardwaj