我创建了一个可以使用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地址的图像地址。
你能告诉我如何实现这一目标吗?谢谢。
答案 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);
?>