Я пытаюсь получить минимальный пример
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
и иметь лучшую структуру проекта, вы должны выполнить следующие шаги:
Создайте файл composer.json
в корне вашего веб-приложения со следующим содержимым: { "require" : { "facebook/php-sdk-v4" : "4.0.*" } }
Вызовите php composer.phar install
src/Acme/App
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... } }
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 в своем веб-корне. Надеюсь, это ясно.
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');
Я решил это. Просто используйте следующую строку вверху вашего скрипта:
define('FACEBOOK_SDK_V4_SRC_DIR', __DIR__ . '/facebook-php-sdk-v4/src/Facebook/');
и все готово.
просто поставьте это на странице включения:
требуется DIR . '/path/to/facebook-php-sdk-v4/autoload.php';
Также вызовите класс перед использованием, каждый раз, когда вам нужно:
использовать Facebook \ FacebookSession;