Php bir filetype tanımak için en iyi yol [kapalı]

4 Cevap php

Php içinde bir dosyanın filetype keşfetmek için en iyi yolu nedir? Ben tarayıcı kandırdın olabilir duydum, bu yüzden bunu yapmanın daha iyi bir yolu nedir?

4 Cevap

Sen kullanabilirsiniz finfo_file

<?php
echo finfo_file(finfo_open(FILEINFO_MIME), "foo.png");
?>

i finfo_file() mimetype keşfetmek demek istedin galiba

php.net Örneği:

<?php
$finfo = finfo_open(FILEINFO_MIME); // return mime type ala mimetype extension
foreach (glob("*") as $filename) {
    echo finfo_file($finfo, $filename) . "\n";
}
finfo_close($finfo);
?>

Bak "sihirli sayılar." Dosyalarının ilk birkaç bayt genellikle olması ne tür bir dosya belirlemek. Örneğin, bir GIF Finalinin ilk birkaç bayt GIF89a veya GIF87a için ya da 47 49 46 38 37 61 veya 47 49 46 38 39 61, ASCII. Diğer birçok "sihirli numaralar" vardır. Bkz http://en.wikipedia.org/wiki/Magic_number_(programming)#Magic_numbers_in_files

EDIT: Ben bu PHP MIME fonksiyonları daha güvenilir olduğuna inanıyorum.

Sen Tarayıcı tarafından döndürülen Content-Type güven olamaz. Bu dosya uzantısına dayanıyor ve kolay kandırdın olabilir.

stalepretzel bahsettiğimiz gibi, dosya içeriği-türünü tahmin etmek en iyi yolu, sihirli numaraları kullanıyor. Sunucu * nix makinede çalışıyorsa, bu işlevi kullanabilirsiniz:

<?php

function get_file_type($file) {
  if(function_exists('shell_exec') === TRUE) {
    $dump = shell_exec(sprintf('file -bi %s', $file));
    $info = explode(';', $dump);
    return $info[0];
  }
  return FALSE;
}

?>

Usage: $file_type = get_file_type('my_file_name.ext');

PD: Daha fazla bilgi için / usr / share / magic.mime kontrol edin.