Лучший способ распознать файл в php

Каков наилучший способ открыть файл filetype в php? Я слышал, что браузер может быть обманут, так что лучший способ сделать это?

Вы можете использовать finfo_file

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

Посмотрите на «магические числа». Первые несколько байтов файлов обычно определяют тип файла. Например, в нескольких байтах GIF есть 47 49 46 38 37 61 или 47 49 46 38 39 61, ASCII для GIF89a или GIF87a. Есть много других «магических чисел». См. http://en.wikipedia.org/wiki/Magic_number_(programming)#Magic_numbers_in_files

EDIT: Я считаю, что это более надежно, чем функции MIME на PHP.

я думаю, вы имеете в виду finfo_file (), чтобы обнаружить mimetype

от php.net Пример:

 <?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); ?> 

Вы не можете доверять Content-Type, возвращаемому браузером. Он основан на расширении файла и может быть легко обманут.

Как упоминалось в Stalepretzel , лучший способ угадать тип содержимого файла – использование магических чисел. Если ваш сервер работает на машине * nix, вы можете использовать эту функцию:

 <?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: проверьте /usr/share/magic.mime.