2011-12-20 62 views
0

我在我的网站上有一个代码来显示远程Gravatar肖像或上传的图像。上传是好的,但我无法得到gravatar图像。用PHP获取远程图像并用GD显示它

无法使用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 

开始检查所以这doesn't工作:

$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 [' 电子邮件“] [0]).'fs = 150' );

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

遇到错误既和我不能创建映像:

从来就搜索的答案,但别人没有fited我。

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

注:

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

回答

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); 
0

如果您的服务器上的PHP安全可以防止通过的file_get_contents文件的远程抓取(),那么你的下一个最好的选择是卷曲呼吁得到也许喂文件内容。

0

如果你的主机不允许的file_get_contents很可能其他方法将无法正常工作。从我的经验主机将阻止脚本任何外部套接字连接。因此,与主机首先检查。

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

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

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

1

好吧,如果你的主机上没有file_get_content,你可能会倒霉。如果这是您主机上的安全功能,那么您将找不到可让您从另一台服务器获取数据的单一功能。

您可能只想绕过该功能,并将图像的src url设置为gravatar。喜欢的东西:

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

(请仔细检查网址,我因为它更有意义的FS之前添加了&,但我不知道API网址怎样的gravatar样子)

这样,它是将发出请求的客户端浏览器,而不是您的服务器。