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 に答える