Error: Clase ‘Facebook \ FacebookSession’ no encontrada con Facebook PHP SDK

Estoy teniendo problemas con la documentación de SDK de Facebook. Descargué el SDK de Github y lo agregué a mi proyecto de PHP.

Aquí está el sistema de archivos:

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

Aquí está mi código hasta ahora:

 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 

Me sale este error

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

Al actualizar mi versión de PHP, el problema no aparece aquí. Parece que los archivos PHP no se encuentran. Leí esta pregunta ( Facebook SDK v4 para PHP Minimal Example ) pero no ayuda.

¿De dónde viene esto?

  1. Se requiere PHP versión 5.4.0 o superior.
  2. Facebook usa Implementaciones de PSR-4 . Por lo tanto, no es necesario utilizar require o require_once o include o include_once .
  3. En PSR-4, solo necesita nombre de paquete (espacio de nombre), es decir, nombre de directorio y nombre de archivo de clase solamente. Registrará las clases de forma dinámica desde el nombre de paquete dado.Ex.:- use packaname\classname .
  4. Encontrará el archivo autoload.php en el directorio raíz de autocargador de Facebook SDK .
  5. use se usa para cargar clases dinámicas usando spl_autoload_register
  6. Facebook registra toda la biblioteca usando autoload.php o autoload_fb.php
  7. Tienes que encontrar autoload.php en tu biblioteca descargada como facebook-php-sdk-v4-4.0-dev/ .
  8. Si solo desea usar la biblioteca de Facebook desde la fuente de descarga, debe copiar autoload.php en su directorio raíz o en el directorio de Facebook.
  9. constante definida para FACEBOOK_SDK_V4_SRC_DIR es decir, la ruta de la biblioteca de Facebook
  10. Debes hacer lo siguiente para usar en php

Nota: He copiado /var/www/stack/24006673/facebook-php-sdk-v4-4.0-dev/src/Facebook y /var/www/stack/24006673/facebook-php-sdk-v4-4.0-dev/autoload.php archivo /var/www/stack/24006673/facebook-php-sdk-v4-4.0-dev/autoload.php en el directorio raíz /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'); 

Encontré la solución aquí

No codifiqué en php desde hace un tiempo y las cosas han cambiado. use Facebook\FacebookSession; no es suficiente. Necesita agregar un require_once también.

 require_once( 'Facebook/FacebookSession.php' ); 

Editar: para obtener una solución más detallada, consulte la respuesta a continuación.

Este código funcionó para mí

 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 'Login'; } 

¡Debes tener cuidado con todos los caminos!

No puedo ver “autoload.php” en su sistema de archivos. En mi caso puse el contenido de PHP SDK en el directorio “fb”, y uso las rutas ( DIR añadido a la línea “definir” en comparación con el ejemplo de 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; <...> 

Ayudó a evitar ese tipo de error.

Cambie el nombre de todos los archivos y directorios de Facebook a minúsculas. La carga automática en * nix reduce automáticamente todos los nombres de archivos.

No es necesario usar require o include . Lo solucioné Simplemente use la siguiente línea en la parte superior de su script:

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

y has terminado.

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

-Solo agregue este código .it funciona. ingrese su app_id y app_secret de su facebookAPP