2011-12-20 61 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樣子)

這樣,它是將發出請求的客戶端瀏覽器,而不是您的服務器。