Откуда берется «тип» в $ _FILES? - PullRequest
2 голосов
/ 23 октября 2010

когда вы загружаете файлы, вы можете получить необходимые данные из файлов $ _FILES, содержащих список входных файлов, где у каждого есть поле типа [тип]

, например:

Array
(
    [file1] => Array
        (
            [name] => 'MyFile.txt'
            [type] => text/plain  //where does this come from?
            [tmp_name] => /tmp/php/php1h4j1o
            [error] => UPLOAD_ERR_OK
            [size] => 123
        )
)

это происходит внутри файла, или с расширением файла, или где-то еще?как php получает тип?откуда берется [тип] и могу ли я доверять ему как действительному?

Ответы [ 3 ]

7 голосов
/ 23 октября 2010

из руководство :

$_FILES['userfile']['type']

MIME-тип файла, если браузер предоставил эту информацию.Примером может быть «image / gif».Этот тип MIME, однако, не проверяется на стороне PHP и поэтому не принимает его значение как должное.

4 голосов
/ 23 октября 2010

Браузер пытается определить тип MIME по имени файла, возможно, по его расширению, а затем отправляет его как часть запроса на загрузку.Таким образом, в вашем примере расширение файла .txt будет соответствовать типу MIME text/plain.Это зависит от реализации браузера.

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

На самом деле, вам гораздо лучше пытаться прочитать содержимое файла или что-то для его проверки.

1 голос
/ 23 октября 2010

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

(Например, это означает, что фотографии, загруженные MSIE, будут иметь type => image/pjpeg; тогда как наиболее распространенный тип MIME для JPEG - image/jpeg)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...