У меня есть два файла.
в первом файле (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);
?>
скрипт работает нормально!
я нашел решение для моей проблемы. Проблема заключается в строках включения в первом файле, потому что test.php находится в другом пути иерархии второго файла.
Я нашел ошибку, используя эти строки кода:
error_reporting(E_ALL);
ini_set('display_errors', 1);
Я прошу прощения, но иногда самые очевидные вещи, которые находятся вне нашего контроля.
спасибо всем за поддержку
Я сам столкнулся с этой проблемой на раннем этапе, потому что я не привык использовать эти команды. Use
Команды должны использоваться в том же файле, в котором вызываются функции, относящиеся к ним. Так что если File A
содержит инициализацию SDK, и вы пытаетесь use
команды, то ваши запросы API должны работать. Если File B
требуется или включен в File A
(или наоборот), вы должны добавить команды использования в Файл B, чтобы инициировать любые функции Graph, но они все равно должны работать. Похоже на то use
Команды работают только внутри файла, для которого они расположены, и не для других.
Во втором файле добавьте use
Команды, которые вам нужны, и я верю, что вы найдете это будет работать. В вашем конкретном случае вам также может понадобиться это в рамках вашей функции.