错误:类';FacebookFacebookSession';在facebook PHP SDK中找不到


Error: Class 'FacebookFacebookSession' not found with the facebook PHP SDK

我很难处理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(,但它没有帮助。

这个通讯是从哪里来的?

  1. PHP 5.4.0版或更高版本是必需的
  2. Facebook使用PSR-4的实现。因此,您不必使用require或require_one或include或include_one
  3. 在PSR-4中,您只需要包名(命名空间(,即目录名和类文件名。它将根据给定的包名称动态注册类。示例:-use packaname'classname
  4. 您将在Facebook SDK autoload根目录中找到文件autoload.php
  5. use用于使用spl_autoload_register加载动态类
  6. Facebook使用autoload.phpautoload_fb.php注册所有库
  7. 您必须在下载的库中找到autoload.php,如facebook-php-sdk-v4-4.0-dev/
  8. 如果您只是想从下载源使用Facebook库。然后,您必须在根目录或Facebook目录中复制autoload.php
  9. FACEBOOK_SDK_V4_SRC_DIR定义的常数,即facebook库的路径
  10. 您需要执行以下操作才能在php中使用

注意:我已经复制了根目录/var/www/stack/24006673/ 中的/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文件

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;
<...>

它有助于避免这种错误。

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

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

你就完了。

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

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