web-dev-qa-db-ja.com

URLがPHPの画像URLであるかどうかを確認する方法は?

URLが画像のURLかどうかを確認する必要がありますか?これどうやってするの?

例:

12
Giffary

絶対に確認したい場合で、PHPがリモート接続に対して有効になっている場合は、次を使用できます。

getimagesize('url');

配列を返す場合、画像拡張子がURLにない場合でも(2番目のリンクごとに)PHPによって認識される画像タイプです。このメソッドはリクエストごとにリモート接続を確立することを覚えておく必要があります。そのため、データベースで既にプローブしたURLをキャッシュして、接続を減らします。

24
Blizz

HEAD request をサーバーに送信してから、Content-typeを確認できます。このようにして、少なくともサーバーがタイプが何であるかを「考える」ことがわかります。

11
VolkerK

以下のようなgetimagesize関数を使用して、URLが画像であるかどうかを確認できます。

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
Jake

アイデアはcurlを介してヘッダーURLのコンテンツを取得することだと思います

ヘッダーを確認してください

curl_exec()を呼び出してWebページを取得した後、curl_getinfo()を呼び出してHTTPヘッダーからコンテンツタイプ文字列を取得します

このリンクでそれを行う方法を見てください:

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

3
Haim Evgi

これを使用できます:

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

これはカールが必要な方法ですが、画像全体をダウンロードしないため、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;
    }
1
nikksan
$ext = strtolower(end(explode('.', $filename)));
switch($ext)
{
case 'jpg':
///Blah
break;
}

ハードバージョン(試してみるだけ)

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