我尝试使用facebook api获取应用用户的个人资料照片,然后将其保存在服务器上。我的图像很好,但是创建一个新的图像文件并将其保存在正确的文件夹中似乎是一个问题。我尝试使用fopen和file_put_contents函数,但显然它们需要事先创建一个文件。如何在服务器上保存fb用户的图像?我的代码如下。
$facebook = new Facebook(array(
'appId' => '12345',
'secret' => '12345',
'cookie' => true
));
$access_token = $facebook->getAccessToken();
if($access_token != "")
{
$user = $facebook->getUser();
if($user != 0)
{
$user_profile = $facebook->api('/me');
$fb_id = $user_profile['id'];
$fb_first_name = $user_profile['first_name'];
$fb_last_name = $user_profile['last_name'];
$fb_email = $user_profile['email'];
$img = file_get_contents('https://graph.facebook.com/'.$fb_id.'/picture?type=large');
$file = '/img/profile_pics/large/';
rename($img, "".$file."".$img."");
}
有什么建议吗?
谢谢,
兰斯
答案 0 :(得分:1)
使用$img = file_get_contents(...)
img将包含图片的来源,只需将其保存到文件中,rename()
无效。
只是做:
error_reporting(E_ALL);//For debugging, in case something else
$img_data = file_get_contents('https://graph.facebook.com/'.$fb_id.'/picture?type=large');
$save_path = '/img/profile_pics/large/';
if(!file_exists($save_path)){
die('Folder path does not exist');
}else{
file_put_contents($save_path.$fb_id.'.jpg',$img_data);
}
答案 1 :(得分:0)
首先,确保您尝试创建图像的目录是可写的,否则为其提供正确的chmod。
就像Lawrence所说,代码中的$ img变量实际上并不包含文件名,而是包含图像本身。要将它保存在文件中,您必须将其作为第二个参数传递给file_put_contents,并将文件名作为第一个参数传递:
file_put_contents('image.ext', $img);
或者在这种情况下:
file_put_contents($file.'/image.ext', $img);
要将其保存在与PHP脚本相同的目录中,您可以使用__DIR__
常量来获取绝对路径:
file_put_contents(__DIR__.'/image.ext', $img);