0

我制作了一个可以使用 Facebook 帐户登录的网站。

我可以轻松放置基本用户信息,但照片根本不起作用。

这是我上传照片的代码。

$imageURL = 'https://graph.facebook.com/'.$fb_id.'/picture?type=large';

$config['upload_path'] = $_SERVER['DOCUMENT_ROOT'].'/'.$this->config->item('cf_dir_uphoto_temp');
$config['allowed_types'] = 'gif|png|jpg';
$config['file_name'] = $this->session->userdata(SESSION_USERID).time();
$config['max_filename'] = '70';
$config['overwrite'] = FALSE;
$config['remove_spaces'] = TRUE;

$this->load->library('upload', $config);

if($this->upload->do_upload('photo'))
{
$data = $this->upload->data();

$src_width = $src_height = ($data['image_width'] <= $data['image_height'])? $data['image_width'] : $data['image_height'];
$buffer_width = $buffer_height = 150;

$buffer_x = 0;
$buffer_y = 0;

$src_x = sprintf('%d', ($data['image_width'] - $src_width)/2);
$src_y = sprintf('%d', ($data['image_height'] - $src_height)/2);

$save_cropfile = $_SERVER['DOCUMENT_ROOT'].'/'.$this->config->item('cf_dir_uphoto_original').$data['file_name'];
$quality = 100;

if($data['file_type'] == 'image/jpeg')
{
    $src_img = imagecreatefromjpeg($data['full_path']);
    $buffer_img = ImageCreateTrueColor($buffer_width, $buffer_height);

    imagecopyresampled($buffer_img, $src_img,
                       $buffer_x, $buffer_y, $src_x, $src_y,
                       $buffer_width, $buffer_height, $src_width, $src_height
    );

    imagejpeg($buffer_img, $save_cropfile, $quality);
}else if($data['file_type'] == 'image/gif')
{
    $src_img = imagecreatefromgif($data['full_path']);
    $buffer_img = ImageCreateTrueColor($buffer_width, $buffer_height);

    imagecopyresampled($buffer_img, $src_img,
                       $buffer_x, $buffer_y, $src_x, $src_y,
                       $buffer_width, $buffer_height, $src_width, $src_height
    );

    imagegif($buffer_img, $save_cropfile);
}else if($data['file_type'] == 'image/png')
{
    $src_img = imagecreatefrompng($data['full_path']);
    $buffer_img = ImageCreateTrueColor($buffer_width, $buffer_height);

    imagecopyresampled($buffer_img, $src_img,
                       $buffer_x, $buffer_y, $src_x, $src_y,
                       $buffer_width, $buffer_height, $src_width, $src_height
    );
    imagepng($buffer_img, $save_cropfile);
}

$config['image_library'] = 'gd2';
$config['source_image'] = $save_cropfile;
$config['new_image'] = $_SERVER['DOCUMENT_ROOT'].'/'.$this->config->item('cf_dir_uphoto_thumb');
$config['width'] = 50;
$config['height'] = 50;

$this->load->library('image_lib', $config);
$this->image_lib->resize();

unlink($data['full_path']);

$p_data = $this->user->set_user_photo($data['file_name']);


}else
    echo $this->upload->display_errors();

这是非常错误的代码。

$imageURL 是将要转换为 jpg 地址的图片地址。

你能给我一个想法如何做到这一点吗?谢谢你。

4

2 回答 2

2

这不是进行 Facebook 登录的好方法。如果你想在你的应用中显示用户的照片,你应该使用 API,而不是把用户的照片下载到你的服务器上。只需做一些简单的事情,例如:

<img src="https://graph.facebook.com/{$fb_id}/picture?type=large" alt="{$username}" />

这将让您直接使用 Facebook 上的图片,并且当用户更改他们的个人资料图片时,它会自动更新。如果用户更新了他们的个人资料,您的代码将不会更新用户的图片。

于 2012-05-25T11:48:55.740 回答
0

如果您正在尝试下载 facebook 用户个人资料照片,请尝试使用此代码,但首先创建一个名为 image 的文件夹并确保它已启用写入权限。

<?php

$fullpath = 'image/image.jpg';
$url = "https://graph.facebook.com/{$user_id}/picture?type=large";

function save_image($img, $fullpath) {
    $rawdata = file_get_contents($img);
    $fp = fopen($fullpath, 'w+');
    chmod($fullpath, 0777);
    fwrite($fp, $rawdata);
    fclose($fp);
}



$headers = get_headers($url, 1);

if (isset($headers['Location'])) {
$url1 = $headers['Location']; // string
} else {
$url1 = false; // nothing there? .. weird, but okay!
}
save_image($url1, $fullpath);
?>
于 2012-05-25T14:25:18.480 回答