Ограничение типа загрузки файла - PullRequest
2 голосов
/ 16 ноября 2009

Простой вопрос. Есть ли способ разрешить только txt файлы при загрузке? Я посмотрел вокруг и все, что я нашел, это text/php, что позволяет PHP.

$uploaded_type=="text/php

Ответы [ 4 ]

4 голосов
/ 16 ноября 2009

Когда вы загружаете файл с PHP, он сохраняется в массиве $ _FILES. Внутри этого есть ключ с именем "type", который имеет MIME-тип файла EG $_FILES['file']['type']

Итак, чтобы проверить это текстовый файл, вы делаете

if($_FILES['file']['type'] == 'text/plain'){
    //Do stuff with it.
}

Это очень хорошо объяснено здесь . Кроме того, не полагайтесь на расширения файлов, это очень ненадежно.

3 голосов
/ 16 ноября 2009

Проще говоря: нет пути. Браузеры не поддерживают ограничители типов в полях загрузки файлов (AFAIK, который был запланирован или даже интегрирован в стандарт HTML, но в лучшем случае практически не реализован). И расширение файла, и информация о типе mime предоставляются пользователем и, следовательно, не могут быть доверенными.

Вы действительно можете только попытаться проанализировать файл и проверить, соответствует ли он тому формату, который вы ожидаете, это единственный надежный способ. С чем нужно быть осторожным, так это с переполнением буфера и тому подобным, вызванным вредоносным искажением файлов. Если вам нужны только текстовые файлы, это, вероятно, не так уж важно.

2 голосов
/ 16 ноября 2009

Вы можете проверить тип MIME загружаемого файла. В codeIgniter этот код используется в библиотеке загрузки:

$this->file_type = preg_replace("/^(.+?);.*$/", "\\1", $_FILES[$field]['type']);

Переменная $this->file_type затем используется для проверки конфигурации загрузки, чтобы увидеть, имеет ли загруженный файл разрешенный тип или нет. Вы можете увидеть полный код в файле библиотеки загрузки CodeIgniter.

1 голос
/ 16 ноября 2009

Вам необходимо проверить расширение загружаемого файла.

Существует Pear HttpUpload, он поддерживает это.

...