0

我的网站上有一个代码可以显示远程Gravatar肖像或上传的图像。上传没问题,但我无法获取 gravatar 图片。

无法使用file_get_contents,因为我的主机不允许使用它。

这是文件的开始检查

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

所以这不起作用:

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

我知道我应该更换:

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

有类似的东西:

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

或者

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

两者都有错误,我无法创建图像:

我已经寻找答案,但其他人不适合我。

对不起,我的英语不好。:(

笔记:

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);
}
}
4

4 回答 4

1

Well, if file_get_content is not available on your host, you might be out of luck. If this is a security feature on your host then you won't find a single function that allows you to get data from another server.

You might want to simply bypass the function and set your image src url to the gravatar one. Something like :

<img src="http://www.gravatar.com/avatar/<?=md5($arUser['email'][0]);?>&fs=150" width="150"/>

(Please double check the url, I added a & before the fs as it makes more sense, but I don't know how gravatar api url looks like)

This way it is the client browser that will make the request and not your server.

于 2011-12-20T19:45:40.580 回答
1

我发现最简单的方法是转移位置:

 if(checkRemoteFile('http://www.gravatar.com/avatar/'.md5($arUser['email'][0])))
    header('Location: http://www.gravatar.com/avatar/'.md5($arUser['email'][0]).'fs='.$sizePic);
于 2012-01-03T16:41:10.097 回答
0

如果您服务器上的 PHP 安全性阻止通过 file_get_contents() 远程获取文件,那么您的下一个最佳选择是 CURL 调用来获取文件内容。

于 2011-12-20T19:41:52.327 回答
0

如果您的主机不允许file_get_contents,则其他方法可能不起作用。根据我的经验,主机将阻止脚本的任何外部套接字连接。所以先跟楼主确认一下。

假设这是问题所在,您仍然可以将具有 src 属性的标签回显到您尝试在脚本中获取的同一位置。

<img src="<?php echo('http://www.gravatar.com/avatar/'.md5($arUser['email'][0]).'fs=150');?>" />

如果您不想使用标签,也可以使用相同的技巧将 url 放入样式中。

于 2011-12-20T19:42:55.913 回答