【问题标题】:Where does the "type" come from in $_FILES?$_FILES 中的“类型”从何而来?
【发布时间】:2010-10-23 10:31:09
【问题描述】:

当您上传文件时,您可以从 $_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] 来自哪里,我可以相信它是有效的吗?

【问题讨论】:

    标签: php security file


    【解决方案1】:

    来自the manual:

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

    文件的 mime 类型,如果 浏览器提供了这些信息。一个 例如“图像/gif”。这 但是未选中 mime 类型 PHP方面,因此不要采取 它的价值是理所当然的。

    【讨论】:

      【解决方案2】:

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

      由于不仅每个浏览器都有自己确定 MIME 类型的方法,而且 MIME 类型也可以通过更改文件扩展名(在众多其他方法中)被故意欺骗,因此不应像往常一样信任它正确。

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

      【讨论】:

      • @seengee:-点击每个人的答案分数- 是的,不知何故! :O
      • @BoltClock 我知道这看起来很可疑,但老实说不是我!
      • @seengee:别担心,我相信你!如果您在这里投反对票,您的声誉不会仍然以 5 结尾;)
      • @seengee - 仅限新手,其他人意识到您不可能对自己的答案投赞成票 :)
      • @Nick Craver 说他不能:P(作为其他人)
      【解决方案3】:

      类型由浏览器决定和设置。这意味着它会受到浏览器品牌、版本、已安装程序和大量其他因素的影响。换句话说,它对服务器端应用程序几乎没有用处。

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

      【讨论】:

      • AFAIK 用于渐进式(因此是 P)JPEG。
      • 是的,用于渐进式 jpeg 并且只发送给他们
      • @Matteo Italia:有趣,不知道。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-04
      • 2021-10-28
      • 2011-04-18
      • 2011-11-10
      • 1970-01-01
      相关资源
      最近更新 更多