как проверить этот URL-адрес изображения URL? - PullRequest
10 голосов
/ 08 августа 2010

У меня есть проблемы.

Мне нужно проверить, является ли URL изображением или нет? Как я могу это сделать?

Пример: если я поставлю http://www.google.com/, это не URL-адрес изображения.

но если я поставлю http://www.google.com/profiles/c/photos/private/AIbEiAIAAABECK386sLjh92M4AEiC3ZjYXJkX3Bob3RvKigyOTEzMmFmMDI5ODQ3MzQxNWQxY2VlYjYwYmE2ZTA4YzFhNDhlMjBmMAEFQ7chSa4PMFM0qw02kilNVE1Hpw или http://www.hoax -slayer.com / images / worlds-strongest-dog.jpg - это URL изображения.

Ответы [ 7 ]

22 голосов
/ 08 августа 2010

Если вы хотите быть абсолютно уверенным, и ваш PHP включен для удаленных подключений, вы можете просто использовать

getimagesize('url');

Если он возвращает массив, это тип изображения, распознаваемый PHP, даже если расширение изображения отсутствует в URL (по вашей второй ссылке). Вы должны иметь в виду, что этот метод будет создавать удаленное соединение для каждого запроса, поэтому, возможно, кешируются URL-адреса, которые вы уже исследовали в базе данных для уменьшения количества соединений.

11 голосов
/ 08 августа 2010

Вы можете отправить HEAD-запрос на сервер, а затем проверить тип содержимого. Таким образом, вы, по крайней мере, знаете, что сервер «думает» о типе.

4 голосов
/ 19 июня 2013

Вы можете проверить, является ли URL изображением, используя функцию getimagesize, как показано ниже.

function validImage($file) {
   $size = getimagesize($file);
   return (strtolower(substr($size['mime'], 0, 5)) == 'image' ? true : false);  
}

$image = validImage('http://www.example.com/image.jpg');
echo 'this image ' . ($image ? ' is' : ' is not') . ' an image file.';
3 голосов
/ 21 июля 2011

Можно использовать это:

$is = @getimagesize ($link);
if ( !$is ) $link='';
elseif ( !in_array($is[2], array(1,2,3))   ) $link='';
elseif ( ($is['bits']>=8) ) $srcs[] = $link;
3 голосов
/ 08 августа 2010

Я думаю, что идея состоит в том, чтобы получить содержимое URL заголовка через curl

и проверить заголовки

После вызова curl_exec() для получения веб-страницы, позвоните curl_getinfo()чтобы получить строку типа содержимого из заголовка HTTP

, посмотрите, как это сделать по этой ссылке:

http://nadeausoftware.com/articles/2007/06/php_tip_how_get_web_page_content_type#IfyouareusingCURL

1 голос
/ 20 октября 2017

Вот способ, который требует скручивания, но быстрее, чем getimagesize, поскольку он не загружает все изображение.Отказ от ответственности: он проверяет заголовки, и они не всегда корректны.

function is_url_image($url){
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url );
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_HEADER, 1);
        curl_setopt($ch, CURLOPT_NOBODY, 1);
        $output = curl_exec($ch);
        curl_close($ch);

        $headers = array();
        foreach(explode("\n",$output) as $line){
            $parts = explode(':' ,$line);
            if(count($parts) == 2){
                $headers[trim($parts[0])] = trim($parts[1]);
            }

        }

        return isset($headers["Content-Type"]) && strpos($headers['Content-Type'], 'image/') === 0;
    }
0 голосов
/ 08 августа 2010
$ext = strtolower(end(explode('.', $filename)));
switch($ext)
{
case 'jpg':
///Blah
break;
}

Жесткая версия (просто пытаюсь)

//Turn off E_NOTICE reporting first
if(getimagesize($url) !== false)
{
//Image
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...