错误:在 facebook PHP SDK 中找不到“Facebook\FacebookSession”类

问题描述 投票:0回答:7

我在 facebook 的 SDK 文档上遇到了困难。我从 Github 下载了 SDK 并将其添加到我的 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 for PHP Minimal Example),但它没有帮助。

这是从哪里来的?

php facebook facebook-graph-api facebook-php-sdk
7个回答
20
投票
  1. 需要 PHP 版本 5.4.0 或更高版本。
  2. Facebook 使用 PSR-4 的实现。因此,您不必使用 require 或 require_once 或 include 或 include_once
  3. 在 PSR-4 中,你只需要包名(命名空间),即目录名和类文件名。它将从给定的包名动态注册类。例如:-
    use packaname\classname
    .
  4. 您将在Facebook SDK Autoload根目录中找到文件autoload.php
  5. use
    用于使用
    spl_autoload_register
  6. 加载动态类
  7. Facebook 使用
    autoload.php
    autoload_fb.php
  8. 注册所有库
  9. 您必须在下载的库中找到autoload.php,例如
    facebook-php-sdk-v4-4.0-dev/
  10. 如果您只想使用下载源中的Facebook库。那么您必须将autoload.php复制到根目录或Facebook目录中。
  11. FACEBOOK_SDK_V4_SRC_DIR
    定义常量,即 facebook 库的路径
  12. 您需要执行以下操作才能在 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');

14
投票

我找到了解决方案在这里

我已经有一段时间没有用 php 编写代码了,事情已经发生了变化。

use Facebook\FacebookSession;
还不够。您还需要添加
require_once

require_once 'Facebook/FacebookSession.php';

3
投票

你应该小心所有的路径!

我在您的文件系统中看不到“autoload.php”。在我的例子中,我将 PHP SDK 的内容放在目录“fb”中,并使用路径(与 https://developers.facebook.com/ 的示例相比,将 DIR . 添加到“define”行中)文档/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;
<...>

它有助于避免此类错误。


2
投票

这段代码对我有用

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>';
}

0
投票

无需使用

require
include
。 我解决了。只需在脚本顶部使用以下行:

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

你就完成了。


0
投票
require_once 'Facebook/autoload.php';
$fb = new Facebook\Facebook([
  'app_id' => '{app_id}',
  'app_secret' => '{app_secret}',
  'default_graph_version' => 'v2.2',
]);

-只需添加此代码即可。 输入您的 facebookAPP 的 app_id 和 app_secret


-1
投票

将所有 Facebook 文件和目录重命名为小写。 *nix 上的自动加载会自动小写所有文件名。

© www.soinside.com 2019 - 2024. All rights reserved.