2014-05-09 9 views
10

Sto attraversando un periodo difficile con la documentazione dell'SDK di Facebook. Ho scaricato l'SDK da Github e l'ho aggiunto al mio progetto PHP.Errore: Classe 'Facebook FacebookSession' non trovata con il PHP SDK di Facebook

Ecco il 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 

Ecco il mio codice finora:

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 

ottengo questo errore

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

Al aggiornato la mia versione di PHP, in modo che il problema non viene da qui. Sembra che i file PHP non vengano trovati. Ho letto questa domanda (Facebook SDK v4 for PHP Minimal Example) ma non aiuta.

Da dove viene?

+0

cosa c'è nel file facebooksession, esiste una classe definita con questo nome? –

+0

possibile duplicato di [Facebook SDK v4 per PHP Esempio minimo] (http://stackoverflow.com/questions/23413854/facebook-sdk-v4-for-php-minimal-example) –

+1

La classe FacebookSession non è più disponibile in v5 .x dell'SDK (che è ancora sotto il nome php-sdk-v4). Un post sul blog che ti aiuterà a passare da 4.x a 5.x dell'SDK può essere trovato qui. https://www.sammyk.me/upgrading-the-facebook-php-sdk-from-v4-to-v5 – Bil

risposta

14

ho trovato la soluzione here

non ho il codice in php per qualche tempo e le cose sono cambiate. use Facebook\FacebookSession; non è abbastanza. È necessario aggiungere anche un require_once.

require_once('Facebook/FacebookSession.php'); 

Modifica: per una soluzione più dettagliata, si prega di controllare la risposta qui sotto.

+1

Sì, è un po 'strano che in nessuno dei documenti di Facebook menzionino quali file includere! – wbinky

+1

Devi includere ** autoload.php ** dalla tua libreria scaricata come facebook-php-sdk-v4-4.0-dev /. La risposta è fornita come sotto –

+0

@rajeshujade puoi inserire qui il tuo codice di esempio, l'ho fatto e non funziona, ho provato quasi tutti i modi, dice ancora la stessa classe di errore non trovata –

0

Rinomina tutti i file e le directory di Facebook in lettere minuscole. Il caricamento automatico su * nix diminuisce automaticamente tutti i nomi dei file.

+0

No, solo no. Come puoi aggiornare la prossima versione allora? – Raptor

+0

È sempre possibile ripetere il processo dopo l'aggiornamento. Ammetto che questa è una soluzione rapida che ho fatto senza indagare se esiste una soluzione migliore, ma questa soluzione ha funzionato perfettamente. – rustyx

20
  1. È richiesta la versione 5.4.0 o successiva di PHP.
  2. Facebook utilizza Implementations of PSR-4. Quindi non è necessario utilizzare require o require_once o include o include_once.
  3. In PSR-4, hai solo bisogno di packagename (spazio dei nomi), ad esempio il nome della directory e il nome del file di classe. Registrerà le classi in modo dinamico dal nome del pacchetto specificato.Ex.:- use packaname\classname.
  4. Troverete il file autoload.php nella directory principale Facebook SDK Autoload.
  5. use viene utilizzato per caricare classi dinamiche utilizzando spl_autoload_register
  6. Facebook Registrati tutte libreria utilizzando autoload.php o autoload_fb.php
  7. Devi trovare autoload.php nella libreria scaricato come facebook-php-sdk-v4-4.0-dev/.
  8. Se si desidera utilizzare la libreria di Facebook dalla fonte di download. Quindi è necessario copiare autoload.php nella directory principale o nella directory di Facebook.
  9. costante definita per FACEBOOK_SDK_V4_SRC_DIR, ad es.percorso della libreria facebook
  10. Hai bisogno di fare come di seguito per uso in php

Nota: ho copiato /var/www/stack/24006673/facebook-php-sdk-v4-4.0-dev/src/Facebook directory e /var/www/stack/24006673/facebook-php-sdk-v4-4.0-dev/autoload.php file nella directory principale /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

Puoi spiegare di più su PSR-4? Non posso dire se è qualcosa che ho bisogno di installare o una tecnica di programmazione. –

+0

Ho appena aggiunto la riga 'require_once (" autoload.php ");' e ha funzionato grazie – Dipen

3

Questo il codice ha funzionato per 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>'; 
} 
+0

Non utilizzare 'require_once()'. Questo non è suggerito da Facebook. Usa invece l'approccio autoload namespace. – Raptor

3

Dovresti stare attento con tutti i percorsi!

Non riesco a vedere "autoload.php" nel tuo file system. Nel mio caso ho messo il contenuto di PHP SDK nella directory "fb", e utilizzare i percorsi (aggiunto DIR. Nella linea di "definire" in confronto con l'esempio di 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; 
<...> 

ha aiutato per evitare quel tipo di errore.

0

Non è necessario utilizzare require o include. L'ho risolto. Basta usare seguente riga nella parte superiore dello script:

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

e si è fatto.

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

-giusto aggiungere questo codice. Funziona. inserisci l'app_id e l'app_secret del tuo facebookAPP

Problemi correlati