可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
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:
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?
回答1:
- PHP Version 5.4.0 or higher is required.
- Facebook uses Implementations of PSR-4. Hence You dont have to use require or require_once or include or include_once.
- 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
. - You will find the file autoload.php in Facebook SDK Autoload root directory.
use
is used to load dynamic classes using spl_autoload_register
- Facebook register all library using
autoload.php
or autoload_fb.php
- You have to find autoload.php in your downloaded library like
facebook-php-sdk-v4-4.0-dev/
. - 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.
- defined constant for
FACEBOOK_SDK_V4_SRC_DIR
i.e. path of the facebook library - 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');
回答2:
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.
回答3:
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 'Login'; }
回答4:
You should be careful with all the paths!
I cannot see "autoload.php" in your file system. In my case I put the content of PHP SDK in the directory "fb", and use the paths (added DIR . into the "define" line in comparison with the example of 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; <...>
It helped to avoid that kind of the error.
回答5:
Rename all Facebook files and directories to lower case. Auto-loading on *nix automatically lowercases all files names.
回答6:
No need to use require
or include
. I solved it. Just use following line at the top of your script:
define('FACEBOOK_SDK_V4_SRC_DIR', __DIR__ . '/facebook-php-sdk-v4/src/Facebook/');
and you are done.
回答7:
require_once 'Facebook/autoload.php'; $fb = new Facebook\Facebook([ 'app_id' => '{app_id}', 'app_secret' => '{app_secret}', 'default_graph_version' => 'v2.2', ]);
-just add this code .it works. enter your app_id and app_secret of your facebookAPP