2015-07-03 1 views
1

мой вопрос: Есть ли какое-то отношение между расширением файла и типом mime? Я имею в виду, если я получу файл, например, .php и изменим его расширение на .png, также изменится его тип mime?Какова связь между типом Mime и расширением файла

+3

Не полагайтесь на расширение файла, которое пользователь дает вам или тип MIME, о котором говорит вам браузер: оба могут быть подделаны. Используйте анализ на стороне сервера (a la 'file' или [' finfo_file'] (http://php.net/manual/en/function.finfo-file.php)) для определения фактического содержимого. – bishop

ответ

2

Короткий ответ: Да.

Немного более длинный ответ: типы MIME и расширения файлов предоставляют подсказки о том, как обращаться с файлом. В то время как расширения файлов обычно используются для вашей ОС, чтобы решить, какую программу открыть файл, типы Mime используются вашим браузером, чтобы решить, как представить некоторые данные (или сервер о том, как интерпретировать полученные данные). Оба варианта являются необязательными, но это хорошая практика для достижения соглашения. Изменение типа mime-файла выполняется в зависимости от вашего веб-сервера. Я считаю, что Apache имеет настройки где-то для сопоставления между расширениями и типами mime. Если у вас есть свой собственный задний конец выступающей содержимое, которое потенциально может служить содержание с любого произвольного типа пантомимы, например, в PHP:

<?php 
// We'll be outputting a PDF 
header('Content-Type: application/pdf'); 
... 

или

<?php 
header('Content-Type: application/javascript'); 
echo "//script code here" 
+0

Также по его другому вопросу, я не думаю, что изменение чего-то расширения файла будет иметь какое-то влияние на его тип mime. – georaldc

+0

Nice @Josep Valls благодарит за ваш ответ. Я спрашиваю об этом, потому что мне нужно иметь сильную проверку при загрузке любого файла в систему. Бизнес требует, чтобы приложение проверяло файл, даже если пользователь менял его расширение сознательно, я подумал, что, возможно, если пользователь изменит его расширение, я бы даже мог проверить файл по типу mime, используя php-функции –

+0

@georaldc, если пользователь меняет расширение файла, я все же могу гарантировать, что у него есть определенный тип с типом mime? –

1

Расширения файлов намеки на вид данные, содержащиеся в файле. MIME-типы - это метки для типа данных в файле. Одно расширение файла соответствует не более чем одному типу MIME. Один тип MIME сопоставляет нулю или больше расширений файлов. Хорошим примером является image/jpeg, который соответствует как .jpg, так и .jpeg.

Теория в сторону, тип MIME, предоставленный вами браузером, как правило, надежный, но если у вас требуется определенность, тогда вы должны предположить, что браузер был взломан.

В таком случае на сервере с помощью PHP, вы можете проверить, что данный файл соответствует данному типу MIME с расширением Finfo:

$path = '/path/to/your/file.pdf'; 
$info = finfo_open(FILEINFO_MIME_TYPE); 
switch (finfo_file($info, $fpath)) { 
case 'application/pdf': 
    // hooray, this is what you want 
    // do whatever 
    break; 

default: 
    throw new RuntimeException('I said give me a PDF!'); 
} 

Или, если вы хотите простую функцию:

function is_mime_type($path, $mime) { 
    return (finfo_file(finfo_open(FILEINFO_MIME_TYPE), $path) === $mime); 
} 

if (is_mime_type('/path/to/file.pdf', 'application/pdf')) { 
    // hooray 
} 

Вот similar answer, который документирует другие подходы для достижения этой цели.

И вот an answer с вопросом о сопоставлении между расширениями файлов и типами MIME.

+0

Nice @bishop, это «то, что я искал».Я проверю, работает ли он. –

+0

Прохладный, дайте мне знать, если нет, я набрал его из памяти без проверки синтаксиса! – bishop

 Смежные вопросы

  • Нет связанных вопросов^_^