2014-05-09 7 views
10

Ich habe eine harte Zeit mit Facebook SDK-Dokumentation. Ich habe das SDK von Github heruntergeladen und es in mein PHP-Projekt eingefügt. HierFehler: Klasse "Facebook FacebookSession" nicht mit dem Facebook-PHP-SDK gefunden

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 so weit:

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 diesen Fehler

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

Bei aktualisiert meine PHP-Version, so dass die Ausgabe gilt nicht von hier. Es scheint, als ob die PHP-Dateien nicht gefunden werden. Ich habe diese Frage gelesen (Facebook SDK v4 for PHP Minimal Example), aber es hilft nicht.

Woher kommt das?

+0

Was gibt es in facebooksession Datei, gibt es eine Klasse mit diesem Namen definiert? –

+0

mögliches Duplikat von [Facebook SDK v4 für PHP Minimal Beispiel] (http://stackoverflow.com/questions/23413854/facebook-sdk-v4-for-php-minimal-example) –

+1

Die FacebookSession-Klasse ist in v5 nicht mehr verfügbar .x des SDK (das immer noch unter dem Namen php-sdk-v4 steht). Ein Blogbeitrag, der Ihnen helfen wird, von 4.x auf 5.x des SDK zu wechseln, finden Sie hier. https://www.sammyk.me/upgrading-the-facebook-php-sdk-from-v4-to-v5 – Bil

Antwort

14

fand ich die Lösung here

ich seit einiger Zeit keinen Code in PHP haben jetzt und die Dinge haben sich geändert. use Facebook\FacebookSession; ist nicht genug. Sie müssen auch eine require_once hinzufügen.

require_once('Facebook/FacebookSession.php'); 

Edit: für eine detailliertere Lösung, überprüfen Sie bitte die Antwort unten.

+1

Ja, es ist irgendwie seltsam, dass in keiner der Facebook-Dokumentation erwähnt, welche Dateien enthalten sind! – wbinky

+1

Sie müssen ** autoload.php ** von Ihrer heruntergeladenen Bibliothek wie facebook-php-sdk-v4-4.0-dev/einschließen. Antwort wird als unten zur Verfügung gestellt –

+0

@rajeshujade können Sie bitte Ihren Beispielcode hier, ich tat, dass und seine nicht funktioniert, ich versuchte fast alle Möglichkeiten, sagt es immer noch dieselbe Fehlerklasse nicht gefunden –

0

Benennen Sie alle Facebook-Dateien und Verzeichnisse in Kleinbuchstaben um. Beim automatischen Laden von * nix werden alle Dateinamen automatisch kleingeschrieben.

+0

Nein, nur nicht. Wie können Sie die nächste Version dann aktualisieren? – Raptor

+0

Sie können den Vorgang nach der Aktualisierung immer wiederholen. Ich gebe zu, dass dies eine schnelle Lösung war, ohne dass ich nachforschte, ob es eine bessere Lösung gibt, aber diese Lösung hat perfekt funktioniert. – rustyx

20
  1. PHP Version 5.4.0 oder höher ist erforderlich.
  2. Facebook verwendet Implementations of PSR-4. Daher müssen Sie nicht require oder require_once oder include_once_once verwenden.
  3. In PSR-4 benötigen Sie nur Paketname (Namespace), d. H. Verzeichnisname und Klasse Dateiname.Es wird Klassen dynamisch von bestimmten Paketnamen registrieren.Ex.:- use packaname\classname.
  4. Sie finden die Datei autoload.php in Stammverzeichnis. mit spl_autoload_register
  5. Facebook registrieren alle Bibliothek autoload.php oder autoload_fb.php
  6. Sie haben zu finden autoload.php in heruntergeladenen Bibliothek wie facebook-php-sdk-v4-4.0-dev/
  7. use wird verwendet, um dynamische Klassen zu laden.
  8. Wenn Sie nur Facebook Bibliothek von Download-Quelle verwenden möchten. Dann müssen Sie kopieren autoload.php in Ihrem Stammverzeichnis oder in Facebook-Verzeichnis.
  9. definierte Konstante für FACEBOOK_SDK_V4_SRC_DIR, d.h.Pfad der Facebook-Bibliothek
  10. Sie müssen wie unten zu Verwendung in php

Hinweis tun: ich /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/

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'); 
+0

Können Sie mehr über PSR-4 erklären? Ich kann nicht sagen, ob es etwas ist, das ich installieren muss oder eine Programmiertechnik. –

+0

Ich habe gerade die Zeile 'require_once (" autoload.php ");' hinzugefügt und es hat funktioniert – Dipen

3

Diese kopiert haben Code arbeitete für mich

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>'; 
} 
+0

Verwenden Sie 'require_once()' nicht. Das schlägt Facebook nicht vor. Verwenden Sie stattdessen die Namespace-Autoload-Methode. – Raptor

3

Sie sollten mit allen Pfaden vorsichtig sein!

Ich kann "autoload.php" in Ihrem Dateisystem nicht sehen. In meinem Fall habe ich den Inhalt von PHP SDK im Verzeichnis „fb“ und die Pfade verwende (hinzugefügt DIR. In die Linie im Vergleich mit dem Beispiel von https://developers.facebook.com/docs/php/gettingstarted/4.0.0 „definieren“)

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 um diese Art des Fehlers zu vermeiden.

0

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

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

und Sie sind fertig.

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

-geben Sie einfach diesen Code .it funktioniert. geben Sie Ihre App_ID und App_Secret von Ihrem FacebookAPP