如何临时存储facebook个人资料图片
How do I temporarily store facebook profile picture?
嘿,伙计们,我正在尝试构建一个小应用程序,它可以拉入用户的个人资料图片,允许他们操作图像,然后将修改后的图像发布到他们的个人资料相册中(理想情况下设置为他们的个人档案图片,但我认为这是不可能的??(。
我遇到的问题是,除非图像是本地,否则我用来更改图像的javascript将无法工作
即<img src="http://profile.ak.fbcdn.net/hprofile-ak-snc4/[some_user_id].jpg" />
将不工作,但<img src="img/image.jpg" />
将。。。
有什么办法可以做到这一点吗?
我用来获取用户图片的方法是:
要连接到facebook:
<?php
require_once 'library/facebook.php';
$app_id = "###";
$app_secret = "###";
$facebook = new Facebook(array(
'appId' => $app_id,
'secret' => $app_secret,
'cookie' => true
));
if(is_null($facebook->getUser()))
{
header("Location:{$facebook->getLoginUrl(array('req_perms' => 'user_status,publish_stream,user_photos'))}");
exit;
}
然后显示图像:
<?php
$aResponse = $facebook->api('/me', array(
'fields' => 'picture',
'type' => 'large'
));
echo "<img src='".$aResponse["picture"]."' />";
?>
非常感谢!
为自己编写一个代理图像服务器,它将您想要操作的图像作为查询参数,并只输出图像内容。这比直接访问用户的图片慢一点,但如果你有创意,你可以在本地缓存图像,以加快后续加载。
一个简单的方法是这样的:
前端:
<img src="image_server.php?img=<?= urlencode($aResponse['picture']); ?>">
后端:
<?php
if (!empty($_GET['img']))
{
//make sure this is a file on the facebook content delivery network
//and not our /etc/passwd or database connection config, or something
//else completely malicious.
if (preg_match("#^https?://profile'.ak'.fbcdn'.net/#i", $_GET['img']))
{
$img_path = $_GET['img'];
}
else
{
//do something with someone that entered a bad image, probably just
//display a "no image" image.
die('bad user. bad.');
}
readfile($img_path);
exit;
}
else
{
//no image was specified. output an anonymous/no image image.
die('an image file must be specified.');
}
你可能想变得更复杂一点。。。但这是基本要点。
注意:php代码假设您在php.ini中启用了fopen包装器(因此您可以包含网址(。
感谢Jim的回复,我看到有人在做类似的事情,但(只是我的运气(我又遇到了问题。无论如何,我设法解决它的方法是:
function save_image($inPath,$outPath)
{ //Download images from remote server
$in= fopen($inPath, "rb");
$out= fopen($outPath, "wb");
while ($chunk = fread($in,8192))
{
fwrite($out, $chunk, 8192);
}
fclose($in);
fclose($out);
}
// This is just pulling the user id to use for the filename
$id = $get_id['id'];
save_image($aResponse['picture'],'tmp/'.$id.'.jpg');
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
function curl_redir_exec($ch)
{
static $curl_loops = 0;
static $curl_max_loops = 20;
if ($curl_loops++ >= $curl_max_loops)
{
$curl_loops = 0;
return FALSE;
}
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
@list($header, $data) = @explode("'n'n", $data, 2);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($http_code == 301 || $http_code == 302)
{
$matches = array();
preg_match('/Location:(.*?)'n/', $header, $matches);
$url = @parse_url(trim(array_pop($matches)));
if (!$url)
{
//couldn't process the url to redirect to
$curl_loops = 0;
return $data;
}
$last_url = parse_url(curl_getinfo($ch, CURLINFO_EFFECTIVE_URL));
if (!$url['scheme'])
$url['scheme'] = $last_url['scheme'];
if (!$url['host'])
$url['host'] = $last_url['host'];
if (!$url['path'])
$url['path'] = $last_url['path'];
$new_url = $url['scheme'] . '://' . $url['host'] . $url['path'] . (@$url['query']?'?'.$url['query']:'');
return $new_url;
} else {
$curl_loops=0;
return $data;
}
}
function get_right_url($url) {
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
return curl_redir_exec($curl);
}
$url = 'http://graph.facebook.com/' . $fbid . '/picture?type=large';
$file_handler = fopen('/img/avatar/'.$fbid.'.jpg', 'w');
$curl = curl_init(get_right_url($url));
curl_setopt($curl, CURLOPT_FILE, $file_handler);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_exec($curl);
curl_close($curl);
fclose($file_handler);
//快乐编码
相关文章:
- AngularJS+Firebase上传个人资料图片
- 显示脸书好友个人资料图片时出现问题
- 如何在ionic中弹出个人资料图片
- Javascript-使用Facebook登录,显示用户's成功登录后的个人资料图片
- Javascript-获取一张用户的随机个人资料图片'的朋友在脸书上
- 推特小部件_bigger个人资料图片
- 如何使用JavaScript SDK更改Facebook个人资料图片并按时更改其背面
- 钛加载Facebook个人资料图片集成不起作用
- 在 Twitter API 版本 1.1 中拉取 Twitter 个人资料图片
- 如何获取电子邮件地址的Google+个人资料图片
- 如何在Meteor应用程序中显示facebook好友数量+个人资料图片
- 链接到网站上的当前Twitter个人资料图片和用户名
- Facebook Graph API-在进行身份验证之前获取个人资料图片
- 无法让用户在注册过程中上传个人资料图片(Parse.com/JS SDK)
- 使用facebook用户名获取facebook个人资料图片
- 检索Facebook个人资料图片的URL
- Facebook的个人资料图片,并下载到我的网络目录
- 如何获取facebook个人资料图片缩略图
- 如何临时存储facebook个人资料图片
- 无法在HTML FB.api('/me')中使用Javascript获取Facebook个人资料图片