Проверять, возвращает ли URL изображение с помощью PHP? - PullRequest
1 голос
/ 13 апреля 2011

Я в основном получаю граватационное изображение пользователя и использую его для своих профилей на своем сайте. Если у пользователя нет учетной записи gravatar, или электронная почта не назначена его учетной записи gravatar, вместо нее отображается изображение по умолчанию.

Мой вопрос: если, например, веб-сайт gravatars вышел из строя и я не смог получить граватар-изображение пользователя, есть ли в php какой-либо способ проверить, возвращает ли gravatar изображение и не отображает ли какой-либо текст или что-то еще?

Очевидно, я могу сделать простое утверждение if; но я не уверен в том, что проверять в PHP, если gravatar возвращает изображение.

Если я не могу проверить, возвращается ли изображение из 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>

Ответы [ 4 ]

3 голосов
/ 13 апреля 2011

Хотя это не отвечает на ваш точный вопрос, я предполагаю, что вам, вероятно, не нужно беспокоиться о том, получаете ли вы изображение от них, потому что вы можете указать Gravatar использовать конкретное изображение как «по умолчанию», если у них его нет. Таким образом, ваш код просто всегда вызывает Gravatar, и они будут определять, показывать ли реальное изображение пользователя или указанное вами значение по умолчанию.

Вкл. http://en.gravatar.com/site/implement/images/, см. Раздел «Изображение по умолчанию».

1 голос
/ 13 апреля 2011

Самый простой способ - проверить, существует ли файл по внешнему 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 голосов
/ 14 июля 2013
     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);
       }
0 голосов
/ 09 октября 2012

Вы можете проверить, возвращает ли 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
)
...