Подтвердить что ты не робот

Как проверить этот URL-адрес?

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

Мне нужно проверить URL-адрес 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 is is url.

4b9b3361

Ответ 1

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

getimagesize('url');

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

Ответ 2

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

Ответ 3

Вы можете проверить, является ли 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.';

Ответ 4

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

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

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

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

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

Ответ 5

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

$is = @getimagesize ($link);
if ( !$is ) $link='';
elseif ( !in_array($is[2], array(1,2,3))   ) $link='';
elseif ( ($is['bits']>=8) ) $srcs[] = $link;

Ответ 6

$ext = strtolower(end(explode('.', $filename)));
switch($ext)
{
case 'jpg':
///Blah
break;
}

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

//Turn off E_NOTICE reporting first
if(getimagesize($url) !== false)
{
//Image
}

Ответ 7

Вот способ, которым требуется завиток, но быстрее, чем 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;
    }