0

我正在尝试使用 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."");
    }

有什么建议么?

谢谢,

4

2 回答 2

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);
}
于 2012-08-18T03:56:06.367 回答
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);
于 2012-08-18T04:00:21.933 回答