“类型”来自$ _FILES?

时间:2010-10-23 10:31:10

标签: php security file

当您上传文件时,您可以从$ _FILES获取必要的数据 files包含文件输入列表,其中每个文件都有[type]

之类的字段

例如:

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如何获得类型? [type]来自哪里,我可以相信它是有效的吗?

3 个答案:

答案 0 :(得分:7)

来自the manual

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

文件的mime类型,如果是   浏览器提供了此信息。一个   例如“image / gif”。这个   但是没有检查mime类型   PHP方面因此不采取   它的价值是理所当然的。

答案 1 :(得分:4)

浏览器尝试从文件名中确定MIME类型,可能是从其扩展名中确定,然后将其作为上载请求的一部分发送。因此,在您的示例中,文件扩展名.txt将对应于MIME类型text/plain。这取决于浏览器的实现。

由于每个浏览器不仅有自己的方式来确定MIME类型,而且简单地通过更改文件扩展名(在众多其他方法中)也可以故意欺骗MIME类型,因此不应该始终信任它正确的。

事实上,你最好不要试图阅读文件的内容或其他东西来验证它。

答案 2 :(得分:1)

该类型由浏览器确定和设置。这意味着它将受到浏览器制作,版本,安装程序和许多其他东西的影响。换句话说,它对服务器端应用程序来说几乎没用。

(例如,这意味着MSIE上传的照片将为type => image/pjpeg;而JPEG最常见的MIME类型为image/jpeg