Bir url bir görüntü olup olmadığını belirlemek için nasıl?

8 Cevap

i want to know from the syntax if a url is a picture or not. example: http://www.blah.com/plo52.jpg or png or gif will return true. if the url is ending with other extension, the function will return false.

Teşekkürler

8 Cevap

Dosyanın mime-tipi için kontrol edin.

O really bir görüntü eğer bu size söylemeyeceğim. Bu sadece ne appears url göre yapılacaktır size söyleyecektir:

$url = "http://somedomain.com/images/kittens.jpg";
if(preg_match("/\.(png|jpeg|jpg|gif|bmp)$/i", $url)) {
  print "Appears to be an image";
} else {
  print "Not an image.";
}

Çıkışlar:

    Appears to be an image

Eğer. Php komut dosyaları veya. Aspx komut ile beslenen görüntüleri görmek düşünüyorsanız, bu yöntem başarısız olur unutmayın. Gerçekten güvenilir testi için, mim-türünü kontrol etmek gerekir.

Ben {, tüm görüntü indirmek gerekir, ve sonra bir dize döndürülür ayrıştırma dayalı ve Content-Type bir image/jpeg olduğundan emin olmayacak şekilde bir HTTP HEAD İsteği yapmanızı öneririz [(2)]}, image/gif, image/png veya benzer bir görüntü İçerik Türleri.

<?php

function parseImage( $url ) {
        $ch = curl_init();

    curl_setopt( $ch, CURLOPT_URL, $url );
    curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, 20 );
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );

    curl_setopt( $ch, CURLOPT_HEADER, true );
    curl_setopt( $ch, CURLOPT_NOBODY, true );

    $content = curl_exec( $ch );

    var_dump($content);
    curl_close($ch);
}

parseImage('http://sstatic.net/so/img/logo.png');

İade

dizge 'HTTP/1.1 200 OK

Cache-Control: max-age = 604800

Content-Length: 3438

Content-Type: image / png

Last-Modified: Sun, 10 Jan 2010 09:14:52 GMT

Kabul aralıkları: bayt

ETag: "32741b5ed591ca1: 0"

Sunucu: Microsoft-IIS/7.5

Tarih: Wed, 13 Ocak 2010 20:37:47 GMT

'(Uzunluk = 256)

Content-Type üstbilgisi emin, sahte olabilir .. ama zaman% 99 bu yöntem güvenilir neden olan, olmayacaktır.

Sigara görüntü URL'ler yine görüntüleri akışı olabilir. Örneğin, bir ashx veya asp URL size görüntü verilerini geri dönebilirler. En iyi yolu, MIME türü, Response.ContentType kontrol etmektir.

Eğer gerçekten% 100 emin olmak için gerekiyorsa, kaynak indirmek ve getimagesize() kullanarak kontrol etmeniz gerekir.

Ben gebelik çözüm upvoted, ama sen gerçekten, gerçekten bilmek istiyorsanız o dosyayı indirmek ve (exec yoluyla linux kullanımı file için örneğin) sistem fonksiyonlarını kullanarak sorgulamak.

Headers_list kullanın ve ardından Content-Type http://php.net/manual/en/function.headers-list.php kontrol

Sen pathinfo uzantısını almak için kullanabilirsiniz:

echo pathinfo('http://www.blah.com/plo52.jpg', PATHINFO_EXTENSION); // jpg

daha sonra bir fonksiyon içine kaydırmak

function hasExtension($uri, array $extensions = array('jpg','gif','png'))
{
    return in_array(pathinfo($uri, PATHINFO_EXTENSION), $extensions);
}

hasExtension('http://www.blah.com/plo52.jpg'); // true

Bu aynı zamanda düzenli dosya yolları ve regex desen sınırlı değildir $ uzatma dizi geçmek edememek tarafından çalışacaktır. Fonksiyon olsa harf duyarlı olduğunu unutmayın.

Bu soruyu ve cevaplarını görmek how to best determine the MimeType of a file: