如何检查这个网址是图片网址?

时间:2010-08-08 08:40:44

标签: php image url

我有一些问题。

我需要检查网址是否是图片网址?我怎么能这样做?

示例:如果我放http://www.google.com/不是图片网址。

但如果我提出http://www.google.com/profiles/c/photos/private/AIbEiAIAAABECK386sLjh92M4AEiC3ZjYXJkX3Bob3RvKigyOTEzMmFmMDI5ODQ3MzQxNWQxY2VlYjYwYmE2ZTA4YzFhNDhlMjBmMAEFQ7chSa4PMFM0qw02kilNVE1Hpwhttp://www.hoax-slayer.com/images/worlds-strongest-dog.jpg是图片网址。

7 个答案:

答案 0 :(得分:22)

如果您想完全确定,并且您的PHP已启用远程连接,您可以使用

getimagesize('url');

如果它返回一个数组,它是PHP识别的图像类型,即使图像扩展名不在url中(按照你的第二个链接)。您必须记住,此方法将为每个请求建立远程连接,因此可能缓存已在数据库中探测的URL以降低连接。

答案 1 :(得分:11)

您可以向服务器发送HEAD request,然后检查内容类型。这样你至少知道服务器“认为”类型是什么。

答案 2 :(得分:4)

您可以使用如下所示的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 :(得分:3)

我认为这个想法是通过curl

获取标题网址的内容

并检查标题

调用curl_exec()获取网页后,调用curl_getinfo()从HTTP标头中获取内容类型字符串

了解如何在此链接中执行此操作:

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

答案 4 :(得分:3)

可以使用:

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

答案 5 :(得分:1)

这是一种需要卷曲的方法,但比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;
    }

答案 6 :(得分:0)

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

硬版(只是尝试)

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