我有两个文件。
在第一个文件(Facebook.php)中,我通过Facebook(Facebook访问令牌)获取用户数据:
<?php
require_once '../include/Config.php';
require_once ( '../libs/facebook/autoload.php' );
use Facebook\FacebookSession;
use Facebook\FacebookRequest;
use Facebook\FacebookRequestException;
function getUserData($token){
// init app with app id and secret
FacebookSession::setDefaultApplication( FB_APP_ID,FB_APP_SECRET ); //
// If you already have a valid access token:
$session = new FacebookSession($token); // 'access-token'
// To validate the session:
try {
$session->validate();
} catch (FacebookRequestException $ex) {
// Session not valid, Graph API returned an exception with the reason.
echo $ex->getMessage();
} catch (\Exception $ex) {
// Graph API returned info, but it may mismatch the current app or have expired.
echo $ex->getMessage();
}
if($session) {
try {
$user_profile = (new FacebookRequest( $session, 'GET', '/me'))->execute()->getGraphObject()->asArray(); //(GraphUser::className());
// print profile data
echo '<pre>' . print_r( $user_profile, 1 ) . '</pre>';
return $user_profile;
} catch(FacebookRequestException $e) {
echo "Exception occured, code: " . $e->getCode();
echo " with message: " . $e->getMessage();
}
}
}
?>
这是管理用户数据的第二个文件:
<?php
require_once '../../../include/Facebook.php';
class userManager {
function __construct() {
}
/**
* Get user data from facebook
* @param user key
* @return user data if exist else false
*/
public function facebookSignIn($token){
$fbUserData = getUserData($token);
print_r($fbUserData);
}
}
?>
在第二个文件中我想用类管理用户数据,但我认为我的脚本没有运行,因为Facebook.php中的代码行
use Facebook\FacebookSession;
use Facebook\FacebookRequest;
use Facebook\FacebookRequestException;
导致编译时间错误。
如果我注释掉这些行我的脚本编译但自然不会检索Facebook用户数据。
在我的课程中包含'facebook.php'的正确方法是什么? 我哪里错了?
我道歉但我不明白'使用'命令以及我如何使用它。
如果我将Facebook.php包含在没有类的测试文件中:
<?php
require_once '../include/Facebook.php';
$token = $_GET["token"];
getUserData($token);
?>
脚本运行正常!
答案 0 :(得分:2)
我找到了解决问题的方法。问题出在第一个文件中的include行中,因为test.php位于第二个文件的不同层次结构路径中。
我使用以下代码行找到了错误:
error_reporting(E_ALL);
ini_set('display_errors', 1);
我道歉,但有时候是我们无法控制的最明显的事情。
感谢大家的支持
答案 1 :(得分:0)
我很早就遇到了这个问题因为我不习惯使用这些命令。 Use
命令必须在调用相对于它们的函数的同一文件中使用。因此,如果File A
包含SDK初始化并且您尝试use
命令,那么您的API请求应该有效。如果File B
中需要File A
(或反之亦然),则必须在文件B中添加使用命令以启动任何图形函数,但它们仍应有效。似乎use
命令只能在它们所在的文件中工作,而不能在其他文件中工作。
在第二个文件中,添加您需要的use
命令,我相信您会发现它可以正常运行。在您的特定情况下,您可能还需要在您的功能中使用它。