Search code examples
phpimagegdgravatar

Get remote image with PHP and show it with GD


I have a code in my website to show remote Gravatar portraits or uploaded images. Uploaded is ok, but i can't get the gravatar images.

Cant use file_get_contents because it´s not allowed on my host.

Heres the start check for the file

if(file_exists($arUser['imagem'][0])){
    $imgPath = $arUser['imagem'][0]; //Usar a imagem enviada
}elseif(!strlen($arUser['imagem'][0]) && checkRemoteFile('http://www.gravatar.com/avatar/'.md5($arUser['email'][0]).'fs=150')){
    $imgPath = 'http://www.gravatar.com/avatar/'.md5($arUser['email'][0]).'fs=150';
}else           
    $imgPath = '../img/social_noavatar_150.jpg'; //Temporario

So this doesn´t work:

$imgData = getimagesize($imgPath);
$src = imagecreatefromwhatever($imgPath);   

I know I should replace:

$imgPath = 'http://www.gravatar.com/avatar/'.md5($arUser['email'][0]).'fs=150';

with something like:

$imgPath = GetFileData('http://www.gravatar.com/avatar/'.md5($arUser['email'][0]).'fs=150');

or

*$imgPath = file_get_contents('http://www.gravatar.com/avatar/'.md5($arUser['email'][0]).'fs=150');*

Got error with both and I can´t create the image:

I´ve searched for the answer but the others didn't fited to me.

Sorry for my bad english. :(

Note:

function imagecreatefromwhatever($image){
$info = pathinfo($image);
$extension = strtolower($info['extension']);
switch($extension) {
    case "jpg":
        return imagecreatefromjpeg($image);
    break;
    case "jpeg":
        return imagecreatefromjpeg($image);
    break;
    case "png":
        return imagecreatefrompng($image);
    break;
    case "gif":
        return imagecreatefromgif($image);
    break;
    default:
        return imagecreatefromjpeg($image);
}
}

Solution

  • The easiest way I have found is to transfer the location:

     if(checkRemoteFile('http://www.gravatar.com/avatar/'.md5($arUser['email'][0])))
        header('Location: http://www.gravatar.com/avatar/'.md5($arUser['email'][0]).'fs='.$sizePic);