Ограничение типа загрузки файлов

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

$uploaded_type=="text/php

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

Поэтому, чтобы проверить, что это txt-файл, который вы делаете

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

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

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

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

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

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

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

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

Есть Pear HttpUpload, он поддерживает это.