2010-07-28 2 views
3

Я работаю над проектом, который требует загрузки файлов. Я хочу убедиться, что он безопасный и что загружаются только файлы PDF. Я уже проверяю расширение файла, но хочу убедиться, что файл действительно является файлом PDF.Проверка типа mime pdf-файлов при загрузке в PHP

Каков наилучший способ проверить тип mime в php? Я использую PHP 5.2.5 и не могу заставить fileinfo или mime_content_type() работать.

для FileInfo я получаю это:

Warning: finfo_open() [function.finfo-open]: Failed to load magic database 
at '(null)'. in [snipped filename] on line 35 
+0

Почему не FILEINFO/mime_content_type работы? –

ответ

5

типы MIME не являются надежными для проверки типа файлов. Браузер клиента может сообщить об этом неправильно.

Отметьте для Magic Number. Файлы PDF начинаются с «% PDF» (25 50 44 46).

+0

Чтение типа mime из переменной $ _FILE получит его из браузера. это то, что я делал. То, что я хочу сделать, это прочитать заголовок файла, чтобы увидеть, действительно ли он является файлом PDF. – Samuel

+0

Да. Вот что здесь предлагается. – recursive

+0

@рекурсивный для записи, второй строки этого ответа не было, когда я отправил комментарий. – Samuel

-2

Простой способ получить тип MIME непосредственно из $ _FILES. Если тип mime содержит слово «pdf», вы можете считать его допустимым PDF.

$contentType = $_FILES['myFile']['type']; 
if(isValidPDF($contentType)) { 
    die('It is a PDF'); 
} else { 
    die('It is not a PDF'); 
} 

function isValidPDF($mime) { 
    return strpos($mime, 'pdf') !== false; 
} 
+0

Это небезопасный метод. $ _FILES get это тип mime из браузера, а не сам файл. – buggedcom

1

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

Но когда файл уже размещен, вы всегда можете проверить тип MIME таким образом:

$Type = $_FILES['someFile']['type']; 

Может быть, вы могли бы использовать класс PHP, чтобы определить, что это действительный PDF-то вроде FPDF (http://www.fpdf.org/)

Ну, удачи в любом случае :)

1

Это, вероятно, означает, что переменная среды MAGIC не установлена, и ваш магический файл не находится в/usr/share/misc/magic. Либо установите значение MAGIC, чтобы указать на правильный волшебный файл, или передать волшебный файл в качестве второго параметра для вашего Finfo конструктора

$finfo = new finfo(FILEINFO_MIME, "/usr/share/misc/magic"); 

или

$finfo = finfo_open(FILEINFO_MIME, "/usr/share/misc/magic"); 
Смежные вопросы