Мне сложно документировать документацию к SDK от facebook. Я загрузил SDK из Github и добавил его в свой PHP-проект.
Вот файловая система:
├── 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
вот мой код:
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
Я получаю эту ошибку
Fatal error: Class 'Facebook\FacebookSession' not found in /homepages/2/d184071366/htdocs/isgeek/fb/FaRepost/test.php on line 9
При обновлении моей версии PHP, так что проблема не идет отсюда. Похоже, что файлы PHP не найдены. Я прочитал этот вопрос ( Facebook SDK v4 для минимального примера PHP ), но это не помогает.
Откуда это происходит?
use packaname\classname
. spl_autoload_register
autoload.php
или autoload_fb.php
facebook-php-sdk-v4-4.0-dev/
. FACEBOOK_SDK_V4_SRC_DIR
т.е. путь библиотеки facebook Примечание. Я скопировал /var/www/stack/24006673/facebook-php-sdk-v4-4.0-dev/src/Facebook
каталог и /var/www/stack/24006673/facebook-php-sdk-v4-4.0-dev/autoload.php
в корневом каталоге /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');
Я нашел решение здесь
Я не кодировал php в течение некоторого времени, и все изменилось. use Facebook\FacebookSession;
недостаточно. Вам также нужно добавить require_once
.
require_once( 'Facebook/FacebookSession.php' );
Изменить: для более детального решения, пожалуйста, ознакомьтесь с приведенным ниже ответом.
Этот код работал для меня
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>'; }
Вы должны быть осторожны со всеми путями!
Я не вижу «autoload.php» в вашей файловой системе. В моем случае я помещаю содержимое PHP SDK в каталог «fb» и использую пути (добавленный DIR . В строку «define» по сравнению с примером 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; <...>
Это помогло избежать такой ошибки.
Переименуйте все файлы и каталоги Facebook в нижний регистр. Автоматическая загрузка на * nix автоматически уменьшает имена всех файлов.
Не нужно использовать require
или include
. Я решил это. Просто используйте следующую строку вверху вашего скрипта:
define('FACEBOOK_SDK_V4_SRC_DIR', __DIR__ . '/facebook-php-sdk-v4/src/Facebook/');
и все готово.