2011-04-13 93 views
1

我基本上檢索用戶的gravatar圖像並將其用於我的網站上的配置文件。如果用戶沒有gravatar帳戶或電子郵件未分配到他們的gravatar帳戶,則會顯示一個默認圖像,而不是gravatar。檢查一個url是否用PHP返回一個圖像?

我的問題是,如果例如gravatars網站出現故障,我無法檢索用戶的gravatar圖像,反正有php我可以檢查看gravatar是否返回圖像,如果不顯示一些文本或東西?

顯然我可以做一個簡單的if語句;但如果gravatar正在返回一個圖像,則檢查PHP是我不確定的。

如果我不能檢查圖像是否從Gravatar返回,檢查鏈接是否在線(可訪問)將罰款我猜。

UPDATE:

我忘了說我這是怎麼檢索的gravatar形象:

function get_gravatar($email, $s = 50, $r = 'pg') 
{ 
$defaultimage='mm'; 
$url='http://www.gravatar.com/avatar/'; 
$url.=md5(strtolower(trim($email))); 
$url.="?s=$s&d=$defaultimage&r=$r"; 
return $url; 
} 

然後顯示我做的:

<a href="http://www.gravatar.com" target="_blank"> 
    <img class="profileimgright profileimgframe" alt="Profile Image" src="<?php echo get_gravatar($_SESSION['email'], 180, 'pg') ?>" /> 
    </a> 
+2

你如何檢索的gravatar? – 2011-04-13 16:23:09

+0

如何檢索gravatar圖標?你只是建立一個URL字符串? – 2011-04-13 16:25:23

+0

沒有信息的答案是設置一個超時,檢查HTTP'Status'頭,和/或檢查返回的'Content-Type'頭是'image/*'類型。我明顯會使用[CURL](http://php.net/curl)以及 – 2011-04-13 16:27:50

回答

1

去將檢查文件是否針對外部URL 存在會通過的fopen

<?php 
    function fileExists($path){ 
    $exists = @fopen($path,"r"); 
    if($exists){ 
     fclose($datei); 
     return true; 
    } 
    return false; 
    } 
?> 

,那麼你可以這樣調用

<? 
    $url = get_gravatar($_SESSION['email'], 180, 'pg'); 
    $exists = fileExists($url); 
?> 

問候最簡單的方法

+0

不要對遠程站點使用fopen。使用[CURL](http://php.net/curl)是因爲它功能更豐富。 – 2011-04-13 16:38:23

+0

@ Jeremy S.非常感謝。 @Kevin Peno。從未使用捲曲,不需要任何特別的東西,但感謝您的建議,並且每個人都會選擇。謝謝! – PHPLOVER 2011-04-13 17:57:18

3

雖然這並未」回答你的確切問題,我猜你實際上可能不需要擔心你是否從他們那裏得到一個圖像,因爲你可以如果Gravatar沒有,那麼告訴Gravatar使用特定的圖像作爲「默認」。這樣,你的代碼總是調用Gravatar,他們將決定是否顯示用戶的真實圖像或你指定的默認值。

http://en.gravatar.com/site/implement/images/,請參閱'默認圖像'部分。

0

你可以檢查一個url是否返回getimagesize圖像: http://php.net/manual/en/function.getimagesize.php

如果不是,它將返回false。

例子:

$asd = getimagesize('/etc/passwd');//(bool) false 
$asd = getimagesize('asd"asd');//(bool) false 
$asd = getimagesize('localhost');//(bool) false 
$asd = getimagesize("http://google.com/' OR ''='");//(bool) false 
$asd = getimagesize('localhost.com');//(bool) false 
$asd = getimagesize('https://www.google.co.uk/images/loading.gif');//array(7) (
    [0] => (int) 80 
    [1] => (int) 80 
    [2] => (int) 1 
    [3] => (string) width="80" height="80" 
    [bits] => (int) 7 
    [channels] => (int) 3 
    [mime] => (string) image/gif 
) 
0
 function gravatar($email, $size = 80, $default_image = 'default', $rating = 'g', $class = '') 
    { 
       $gravatar_url = 'http://www.gravatar.com/avatar/'; 
       $gravatar_url .= md5(strtolower(trim($email))); 
       $gravatar_url .= "?s=$size&d=$default_image&r=$rating"; 

       if ($class !== '') 
       { 
        $class = 'class="'.$class.'"'; 
       } 

       $gravemail = md5(strtolower(trim($email))); 
       $gravcheck = "http://www.gravatar.com/avatar/".$gravemail."?d=404"; 
       $response = get_headers($gravcheck); 
       if ($response[0] != "HTTP/1.0 404 Not Found") 
       { 
        return '<img src='.$gravatar_url.' alt="gravatar" width="'.$size.'" height="'.$size.'" '.$class.'>'; 
       } 
       else 
       { 
        return false; 
       } 

     } 

     if(gravatar($youremail)) 
     { 
     echo gravatar($youremail); 
     } 
相關問題