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 

недавно решили это. так как есть файл 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/'); чтобы убедиться, что это правильно.

Здесь представлен полный (рабочий) пример: 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>'; } 

Я думаю, вам нужно изменить эту строку:

 using Facebook\FacebookSession; 

в

 use Facebook\FacebookSession; 

для использования пространства имен в php ключевое слово use больше на php с использованием пространств имен

Обновить:

использование пространств имен автоматически не включает сценарий, вам необходимо указать путь в вашей автозагрузке (если таковой имеется) или просто:

 include 'path/to/FacebookSession.php'; 

Update2: сначала, пожалуйста, прочитайте пространства имен php в руководстве, во-вторых, нет, если он уже включен в исходный класс, тогда вы этого не сделаете. или если он придерживается psr- *, то вы можете использовать некоторый автозагрузчик или использовать spl_autoload_register

Да, новые уроки не очень полезны.

Я бегу через них, сам, и просто чтобы привести примеры к работе, я сделал:

 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/");

Получил меня через учебник -! Теперь выясним, как получить электронную почту пользователя / полную информацию о профиле.

Чтобы избежать использования require или require_once и иметь лучшую структуру проекта, вы должны выполнить следующие шаги:

  1. Установите композитор с https://getcomposer.org/
  2. Создайте файл composer.json в корне вашего веб-приложения со следующим содержимым: { "require" : { "facebook/php-sdk-v4" : "4.0.*" } }

  3. Вызовите php composer.phar install

  4. Создайте папку src/Acme/App
  5. Создайте файл src/Acme/App/Run.php со следующим содержимым:

<?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... } } 
  1. Создайте файл index.php со следующим содержимым:

<?php

 $loader = require_once 'vendor/autoload.php'; $loader->add('Acme\App', __DIR__.'/src'); $app = new Run(); 

Это будет скелет вашего приложения Facebook (все ваши последующие классы должны соответствовать стандарту PSR-4). Используя автозагрузчик композитора, вам не нужно использовать require_once для классов в любом зарегистрированном пространстве имен.

PS Возможно, вы захотите удалить все свои библиотеки из корня веб-сайта. Это поможет предотвратить прямой доступ из Интернета к ним. Затем вы можете просто изменить пути и сохранить только index.php в своем веб-корне. Надеюсь, это ясно.

  1. Требуется PHP версии 5.4.0 или выше.
  2. Facebook использует Реализации PSR-4 . Следовательно, вам не нужно использовать require или require_once или include или include_once .
  3. В PSR-4 вам просто нужно указать имя пакета (namespace), то есть имя каталога и имя файла класса. Он будет динамически регистрировать классы из данного имени пакета .Ex.:- use packaname\classname .
  4. Файл autoload.php вы найдете в корневой директории Facebook SDK Autoload .
  5. используется для загрузки динамических классов с использованием spl_autoload_register
  6. Facebook регистрирует всю библиотеку, используя autoload.php или autoload_fb.php
  7. Вы должны найти autoload.php в своей загруженной библиотеке, например facebook-php-sdk-v4-4.0-dev/ .
  8. Если вы просто хотите использовать библиотеку Facebook из источника загрузки. Затем вам нужно скопировать файл autoload.php в корневой каталог или в каталог Facebook.
  9. определенная константа для FACEBOOK_SDK_V4_SRC_DIR т.е. путь библиотеки facebook
  10. Вы должны сделать так, как показано ниже, для использования в 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'); 

Я решил это. Просто используйте следующую строку вверху вашего скрипта:

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

и все готово.

просто поставьте это на странице включения:

требуется DIR . '/path/to/facebook-php-sdk-v4/autoload.php';

Также вызовите класс перед использованием, каждый раз, когда вам нужно:

использовать Facebook \ FacebookSession;