Nasıl php ile bir dosyanın mime-tipi buluyorsunuz?

10 Cevap php

Tamam, bu yüzden birçok farklı dosya türlerini işlemek için olan bir index.php dosyası var. nasıl REQUEST_URI dayalı filetype tahmin yok.

I http://site/image.jpg istemek, ve tüm istekleri bu gibi görünüyor, hangi index.php aracılığıyla yönlendirirseniz

<?php
   include('/www/site'.$_SERVER['REQUEST_URI']);
?>

Bunu nasıl iş doğru yapmak istiyorsunuz?

Ben istenen dosyanın uzantısına göre test veya filetype almak için bir yol var mıdır?

10 Cevap

Eğer sadece hiç görüntüleri ile çalıştığınızdan emin iseniz, görüntü MIME türünü dönmeye çalışır getimagesize() exif_imagetype() PHP fonksiyonu, kontrol edebilirsiniz.

Eğer dış bağımlılıkları sakıncası yoksa, ayrıca birçok farklı dosya türleri mim-türünü belirlemek mükemmel getID3 kütüphane kontrol edebilirsiniz.

Son olarak, mime_content_type() fonksiyonunu kontrol edebilirsiniz - ancak Fileinfo PECL uzantısı onaylanmaz.

mime_content_type () önerilmemektedir, o yüzden gelecekte çalışma saymak mümkün olmayacaktır. Orada bir "fileinfo" PECL uzantısı, ama ben onun hakkında iyi şeyler duymadım.

: Bir * nix sunucu üzerinde çalışıyorsa, sen benim için iyi çalıştı aşağıdaki yapabilirim

$file = escapeshellarg( $filename );
$mime = shell_exec("file -bi " . $file);
$filename should probably include the absolute path.
function get_mime($file) {
  if (function_exists("finfo_file")) {
    $finfo = finfo_open(FILEINFO_MIME_TYPE); // return mime type ala mimetype extension
    $mime = finfo_file($finfo, $file);
    finfo_close($finfo);
    return $mime;
  } else if (function_exists("mime_content_type")) {
    return mime_content_type($file);
  } else if (!stristr(ini_get("disable_functions"), "shell_exec")) {
    // http://stackoverflow.com/a/134930/1593459
    $file = escapeshellarg($file);
    $mime = shell_exec("file -bi " . $file);
    return $mime;
  } else {
    return false;
  }
}

Benim için, bu hiçbir şey çalışır - mime_content_type finfo yüklü değilse, itiraz edildi, ve shell_exec izin verilmez.

Sadece Görüntüler ile çalışan ve mime türünü (başlıkları için örneğin) gerekiyorsa, o zaman bu hızlı ve en doğrudan cevap:

$file = 'path/to/image.jpg';
$image_mime = image_type_to_mime_type(exif_imagetype($file));

Bu çıkış ve gerçek görüntü mim size görüntü dosyasını yeniden adlandırmak bile yazacaktır

Aslında PHP yöntemleri koklama standard MIME eksikliği bıkmış var. Fileinfo yükleyin ... önerilmiyor işlevlerini kullanın ... Ah bu çalışma, ama sadece görüntüler için! Ondan bıkmış var, o yüzden biraz araştırma yaptım ve buldum WHATWG Mimesniffing spec - Ben bu olsa hala bir taslak spec olduğuna inanıyorum.

Her neyse, bu özellikleri kullanarak, PHP bir mimesniffer uygulamak mümkün oldu. Performans bir sorun değildir. Benim mütevazı makinede Aslında, ben PHP zaman aşımına önce binlerce dosya açmak ve burnunu başardı.

İşte MimeReader class olduğunu.

require_once("MimeReader.php");

$mime = new MimeReader(<YOUR FILE PATH>);
$mime_type_string = $mime->get_type();     // "image/jpeg" etc.

Php kılavuzuna göre, finfo-file function Bunu yapmanın en iyi yoludur. Ancak, FileInfo PECL eklentisini yüklemeniz gerekir.

Uzantısı bir seçenek değilse, sen eski mime_content_type işlevini kullanabilirsiniz.

i got very good results using a user function from http://php.net/manual/de/function.mime-content-type.php @''john dot howard at prismmg dot com 26-Oct-2009 03:43''

function get_mime_type($filename, $mimePath = '../etc') { ...

finfo, exec veya artık işlevini kullanmak değildir ki

Uzaktan ressources ile de iyi çalışıyor!

Ben kullanmadım, ama bir PECL extension, bir dosyanın mimetype almak için var. Bunun için resmi belgeler the manual içinde.

Sizin ihtiyaçlarınıza bağlı olarak, bir dosya uzantısı Tamam olabilir, ama o kadar kolay değiştirilebilir beri inanılmaz derecede güvenilir değil.

Sadece görüntüleri ile uğraşıyoruz eğer türü dahil görüntü, hakkında bilgi her türlü içeren [getimagesize()][1] işlevini kullanabilirsiniz.

Daha genel bir yaklaşım PECL'de Fileınfo uzantısını kullanmak olacaktır. Bu uzantı için PHP belgelerine bulunabilir: http://us.php.net/manual/en/ref.fileinfo.php

Bazı insanlar bu uzantı konusunda ciddi şikayetleri var ... bu yüzden ciddi sorunları çalıştırmak veya mime_content_type() depricated işlevini kontrol etmek isteyebilirsiniz nedense uzantısı yüklemek değil, eğer

kullanmak int exif_imagetype ( string $filename )