Facebook SDK v4 для PHP Минимальный пример
Я пытаюсь получить минимальный пример
using Facebook\FacebookSession;
FacebookSession::setDefaultApplication('YOUR_APP_ID','YOUR_APP_SECRET');
// Use one of the helper classes to get a FacebookSession object.
// FacebookRedirectLoginHelper
// FacebookCanvasLoginHelper
// FacebookJavaScriptLoginHelper
// or create a FacebookSession with a valid access token:
$session = new FacebookSession('access-token-here');
// Get the GraphUser object for the current user:
try {
$me = (new FacebookRequest(
$session, 'GET', '/me'
))->execute()->getGraphObject(GraphUser::className());
echo $me->getName();
} catch (FacebookRequestException $e) {
// The Graph API returned an error
} catch (\Exception $e) {
// Some other error occurred
}
из README, но я не понимаю, что означает первая строка кода. Где я должен поместить файл PHP, используя этот минимальный пример кода в структуре файла SDK. Я пробовал прямо в папке src, но это возвращает следующую ошибку PHP
[01-May-2014 20:12:26 Europe/Berlin] PHP Parse error: syntax error, unexpected 'Facebook' (T_STRING) in /Applications/MAMP/htdocs/facebook-php-sdk-v4/src/test.php on line 9
Структура файла выглядит следующим образом:
├── src
│ ├── 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
Ответы
Ответ 1
недавно решили это.
поскольку есть файл autoload.php, доступный с помощью sdk, вам не нужно использовать require и т.д. и т.д.
просто включите, что autoload.php в начале
<?php
session_start();
// added in v4.0.0
require_once 'autoload.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\FacebookCurlHttpClient;
use Facebook\HttpClients\FacebookHttpable;
// start session
// init app with app id and secret
FacebookSession::setDefaultApplication( 'app-id','app-secret' );
// login helper with redirect_uri
$helper = new FacebookRedirectLoginHelper('http://yourhost/facebook/' );
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 '<pre>' . print_r( $graphObject, 1 ) . '</pre>';
} else {
// show login url
echo '<a href="' . $helper->getLoginUrl() . '">Login</a>';
}
?>
после этого вам необходимо проверить путь в файле autoload.php
$base_dir = defined('FACEBOOK_SDK_V4_SRC_DIR') ? FACEBOOK_SDK_V4_SRC_DIR : __DIR__ . '/src/Facebook/';
эта строка является кодом по умолчанию, если вы изменили имя каталогов, например, поместили все файлы из/src/Facebook/в/sdk/, а затем просто замените имя
всегда проверяйте входящий путь с помощью die(__DIR__ . '/src/Facebook/');
чтобы убедиться, что это правильно.
Ответ 2
Здесь есть полный (рабочий) пример: http://metah.ch/blog/2014/05/facebook-sdk-4-0-0-for-php-a-working-sample-to-get-started/
Код:
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' );
use Facebook\FacebookSession;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\FacebookRequest;
use Facebook\FacebookResponse;
use Facebook\FacebookSDKException;
use Facebook\FacebookRequestException;
use Facebook\FacebookAuthorizationException;
use Facebook\GraphObject;
// init app with app id (APPID) and secret (SECRET)
FacebookSession::setDefaultApplication('APPID','SECRET');
// login helper with redirect_uri
$helper = new FacebookRedirectLoginHelper( 'http://www.metah.ch/' );
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>';
}
Ответ 3
Я думаю, вам нужно изменить эту строку:
using Facebook\FacebookSession;
к
use Facebook\FacebookSession;
для использования пространства имен в php ключевое слово use
больше на php с использованием пространств имён
Update:
с помощью пространств имен автоматически не включается script, вам нужно указать путь в вашей автозагрузке (если он у вас есть) или просто:
include 'path/to/FacebookSession.php';
Update2:, сначала прочитайте пространства имен php в руководстве, во-вторых, нет, если он уже включен в исходный класс, то вы этого не сделаете. или если он придерживается psr- *, то вы можете использовать некоторый автозагрузчик или использовать spl_autoload_register
Ответ 4
Да, новые уроки не очень полезны.
Я бегу через них, сам, и просто чтобы привести примеры к работе, я сделал:
function facebookLoader($class) {
require "/path/to/facebook-php-sdk-v4-master/src/" . str_replace("\\", "/", $class) . ".php";
}
spl_autoload_register("facebookLoader");
Facebook\FacebookSession::setDefaultApplication([...]
и добавлено Facebook\
где-либо, где было вызвано имя класса.
Кроме того, в учебнике есть часть, в которой говорится:
FacebookRedirectLoginHelper();
Когда вы, по сути, все равно должны внести свой вклад:
FacebookRedirectLoginHelper("http://yourRedirectUri.com/");
Получил меня через учебник -! Теперь выясним, как получить адрес электронной почты пользователя/полную информацию о профиле.
Ответ 5
Чтобы избежать использования require
или require_once
и чтобы иметь лучшую структуру проекта, вы должны выполнить следующие шаги:
<?php
namespace Acme\App;
use Facebook\FacebookSession;
use Facebook\FacebookRequest;
use Facebook\GraphUser;
use Facebook\FacebookRequestException;
class Run {
const APP_ID = 'app_id';
const APP_SECRET = 'app_secret';
public function __construct()
{
FacebookSession::setDefaultApplication(self::APP_ID, self::APP_SECRET);
// ...your code goes here...
}
}
- Создайте файл
index.php
со следующим содержимым:
<?php
$loader = require_once 'vendor/autoload.php';
$loader->add('Acme\App', __DIR__.'/src');
$app = new Run();
Это будет скелет вашего приложения Facebook (все ваши последующие классы должны соответствовать стандарту PSR-4). Используя автозагрузчик композитора, вам не нужно использовать require_once
для классов в любом зарегистрированном пространстве имен.
P.S. Вы можете удалить все свои библиотеки из корня веб-сайта. Это поможет предотвратить прямой доступ из Интернета к ним. Затем вы можете просто изменить пути и сохранить только index.php в своем веб-корне. Надеюсь, это ясно.
Ответ 6
- Требуется PHP версия 5.4.0 или выше.
- Facebook использует Реализации PSR-4. Следовательно, вам не нужно использовать require или require_once или include или include_once.
- В PSR-4 вам просто нужно указать имя пакета (namespace), то есть имя каталога и имя файла класса. Он будет динамически регистрировать классы из указанного имени пакета .Ex.:-
use packaname\classname
.
- Вы найдете файл autoload.php в Facebook SDK Autoload корневой каталог.
-
use
используется для загрузки динамических классов с помощью spl_autoload_register
- Facebook регистрирует всю библиотеку, используя
autoload.php
или autoload_fb.php
- Вам необходимо найти autoload.php в вашей загруженной библиотеке, например
facebook-php-sdk-v4-4.0-dev/
.
- Если вы просто хотите использовать Facebook библиотеку из источника загрузки. Затем вам нужно скопировать autoload.php в корневую директорию или в каталог Facebook.
- определенная константа для
FACEBOOK_SDK_V4_SRC_DIR
то есть путь библиотеки facebook
- Вам нужно сделать, как показано ниже, использовать в php
Примечание: Я скопировал каталог /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');
Ответ 7
Я решил это. Просто используйте следующую строку вверху вашего script:
define('FACEBOOK_SDK_V4_SRC_DIR', __DIR__ . '/facebook-php-sdk-v4/src/Facebook/');
и все готово.
Ответ 8
просто включите эту страницу include:
требуется DIR. '/path/to/facebook-php-sdk-v4/autoload.php';
Также вызывайте класс перед использованием, каждый раз, когда вам нужно:
использовать Facebook\FacebookSession;