Лучший способ распознать тип файла в php [закрыто]
Вопрос
Как лучше всего определить тип файла в 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. Есть много других & "Магических чисел". & Quot; См. http://en.wikipedia.org/wiki/Magic_number_ (программирование) #Magic_numbers_in_files а> р>
РЕДАКТИРОВАТЬ: я считаю, что это более надежно, чем функции 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, возвращенному Browser. Он основан на расширении файла и может быть легко обманут.
Как сказал 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 для получения дополнительной информации.