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

StackOverflow https://stackoverflow.com/questions/457797

  •  19-08-2019
  •  | 
  •  

Вопрос

Как лучше всего определить тип файла в 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 для получения дополнительной информации.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top