1

我基本上检索用户的 gravatar 图像并将其用于我网站上的个人资料。如果用户没有 gravatar 帐户或电子邮件未分配给他们的 gravatar 帐户,则会显示默认图像,而不是来自 gravatar。

我的问题是,如果例如 gravatars 网站出现故障并且我无法检索用户的 gravatar 图像,那么在 php 中我是否可以检查 gravatar 是否正在返回图像,如果不显示某些文本或其他内容?

显然我可以做一个简单的 if 语句;但是如果 gravatar 返回图像,则检查 PHP 是我不确定的。

如果我无法检查是否从 Gravatar 返回了图像,我想检查链接是否在线(可访问)就可以了。

更新:

我忘了提到这是我从 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>
4

4 回答 4

3

虽然这不能回答您的确切问题,但我猜您实际上可能不需要担心您是否从他们那里获取图像,因为您可以告诉 Gravatar 使用特定图像作为“默认值” ' 如果他们没有。这样,您的代码总是调用 Gravatar,它们将确定是显示用户的真实图像还是您指定的默认值。

http://en.gravatar.com/site/implement/images/上,请参阅“默认图像”部分。

于 2011-04-13T16:32:57.150 回答
1

最简单的方法是通过 fopen 检查外部 url 上是否存在文件

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

问候

于 2011-04-13T16:36:01.880 回答
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);
       }
于 2013-07-14T08:06:13.747 回答
0

您可以使用 getimagesize 检查 url 是否返回图像: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
)
于 2012-10-09T15:33:51.127 回答