Salvar a imagem do perfil Facebook utilizando SDK V5
Ola, pesquisei bastante e não encontrei uma solução... Pois consigo acessar todos os dados que solicitei permissão, porém na hora de salvar a imagem em meu servidor tenho um arquivo salvo com 0KB e uma mensagem no arquivo log.
ERROR_LOG
[17-Aug-2016 00:07:50 America/New_York] PHP Warning: Illegal string offset 'url' in /home/*****/login.php on line 243
[17-Aug-2016 00:07:50 America/New_York] PHP Warning: file_get_contents(h): failed to open stream: No such file or directory in /home/*****/login.php on line 243
Segue o código
<?php
session_start();
require_once __DIR__ . '/src/Facebook/autoload.php';
$fb = new Facebook\Facebook([
'app_id' => 'APP_ID',
'app_secret' => 'APP_SECRET',
'default_graph_version' => 'v2.4',
]);
$helper = $fb->getCanvasHelper();
$permissions = ['email']; // optionnal
try {
if (isset($_SESSION['facebook_access_token'])) {
$accessToken = $_SESSION['facebook_access_token'];
} else {
$accessToken = $helper->getAccessToken();
}
} catch(Facebook\Exceptions\FacebookResponseException $e) {
// When Graph returns an error
echo 'Graph returned an error: ' . $e->getMessage();
exit;
} catch(Facebook\Exceptions\FacebookSDKException $e) {
// When validation fails or other local issues
echo 'Facebook SDK returned an error: ' . $e->getMessage();
exit;
}
if (isset($accessToken)) {
if (isset($_SESSION['facebook_access_token'])) {
$fb->setDefaultAccessToken($_SESSION['facebook_access_token']);
} else {
$_SESSION['facebook_access_token'] = (string) $accessToken;
// OAuth 2.0 client handler
$oAuth2Client = $fb->getOAuth2Client();
// Exchanges a short-lived access token for a long-lived one
$longLivedAccessToken = $oAuth2Client->getLongLivedAccessToken($_SESSION['facebook_access_token']);
$_SESSION['facebook_access_token'] = (string) $longLivedAccessToken;
$fb->setDefaultAccessToken($_SESSION['facebook_access_token']);
}
// validating the access token
try {
$request = $fb->get('/me');
} catch(Facebook\Exceptions\FacebookResponseException $e) {
// When Graph returns an error
if ($e->getCode() == 190) {
unset($_SESSION['facebook_access_token']);
$helper = $fb->getRedirectLoginHelper();
$loginUrl = $helper->getLoginUrl('https://apps.facebook.com/APP_NAMESPACE/', $permissions);
echo "<script>window.top.location.href='".$loginUrl."'</script>";
exit;
}
} catch(Facebook\Exceptions\FacebookSDKException $e) {
// When validation fails or other local issues
echo 'Facebook SDK returned an error: ' . $e->getMessage();
exit;
}
// getting profile picture of the user
try {
$requestPicture = $fb->get('/me/picture?redirect=false&height=300'); //getting user picture
$requestProfile = $fb->get('/me'); // getting basic info
$picture = $requestPicture->getGraphUser();
$profile = $requestProfile->getGraphUser();
} catch(Facebook\Exceptions\FacebookResponseException $e) {
// When Graph returns an error
echo 'Graph returned an error: ' . $e->getMessage();
exit;
} catch(Facebook\Exceptions\FacebookSDKException $e) {
// When validation fails or other local issues
echo 'Facebook SDK returned an error: ' . $e->getMessage();
exit;
}
// showing picture on the screen
echo "<img src='".$picture['url']."'/>";
// saving picture
$img = __DIR__.'/'.$profile['id'].'.jpg';
file_put_contents($img, file_get_contents($picture['url']));
// Now you can redirect to another page and use the access token from $_SESSION['facebook_access_token']
} else {
$helper = $fb->getRedirectLoginHelper();
$loginUrl = $helper->getLoginUrl('https://apps.facebook.com/APP_NAMESPACE/');
echo "<script>window.top.location.href='".$loginUrl."'</script>";
}
Consigo exibir a foto aqui:
echo "<img src='".$picture['url']."'/>";
Porém não consigo salvá-la utilizando...:
$img = __DIR__.'/'.$profile['id'].'.jpg';
file_put_contents($img, file_get_contents($picture['url']));
Alguém teria uma solução ou saberia o porque de não funcionar dessa forma?
Discussão (1)
Carregando comentários...