在CodeIgniter PHP中上传facebook url照片

时间:2012-05-25 09:51:31

标签: php facebook codeigniter

我创建了一个可以使用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地址的图像地址。

你能告诉我如何实现这一目标吗?谢谢。

2 个答案:

答案 0 :(得分:2)

这不是进行Facebook登录的好方法。如果要在应用中显示用户的照片,则应使用API​​,而不是将用户的照片下载到服务器。做一些简单的事情:

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

这将允许您直接从Facebook使用图像,并在用户更改其个人资料图片时自动更新。如果用户更新了他们的个人资料,您的代码将不会更新用户的图片。

答案 1 :(得分: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);
?>