【问题标题】:php file types for pdf, mp3pdf、mp3 的 php 文件类型
【发布时间】:2011-07-20 09:41:32
【问题描述】:

我有一个代码部分检查是否:

($_FILES["fileToUpload"]["type"] == "image/gif" || $_FILES["fileToUpload"]["type"] == "image/jpeg" || $_FILES["fileToUpload"]["type"] == "image/png")

我可以用什么替换 'image/gif' 以使其过滤 pdf 和 mp3?

【问题讨论】:

    标签: php file-upload


    【解决方案1】:

    small selection of MIME types 包括:

    audio/mpeg: MP3 or other MPEG audio; Defined in RFC 3003
    application/pdf: Portable Document Format, PDF has been in use for document exchange on the Internet since 1993; Defined in RFC 3778
    

    【讨论】:

      【解决方案2】:

      请不要只检查$_FILES['name']['type'],因为发送此信息的是浏览器,而且很容易伪造信息,例如将代码注入文件。

      为了使其更安全,请使用FileInfo 函数进行 MIME 类型检查,但是,特别是对于 mp3 文件,它可能只会被识别为 application/octet-stream

      【讨论】:

      • +1 因为这是一个完全正确的答案。不过它可以使用一些扩展。
      【解决方案3】:

      list of MIME types

      您可以像这样编写更易于阅读的代码:

      $mime_filter = array(
        'image/gif', 'image/jpeg', 'image/png', 
        'application/pdf',
        'audio/mpeg', 'audio/mpeg3', 'audio/x-mpeg', 'audio/x-mpeg-3');
      
      if (in_array($_FILES["fileToUpload"]["type"], $mime_filter)) {
        // ...
      

      【讨论】:

        【解决方案4】:

        不完全是您问题的答案,而是一个旁白:

        检查type 值根本不会告诉您任何信息。 This value is produced by the browser and is not checked by PHP on the server side(SO 上的许多类似问题都有指出这一点的答案——检查右侧的“相关”侧边栏)。浏览器可以配置为针对任何指定的文件扩展名发送任何内容,因此如果您使用此值,您实际上是在盲目相信用户输入(bad)。

        最好从文件名中提取扩展名,然后按照自己的意愿去做。

        更新:我没想到会得到太多支持,但就目前情况而言,我觉得我应该提供更多信息。

        如果您不能只使用文件扩展名,您可以使用 fileinfo 函数获取文件的 MIME 类型,正如 usoban 所说。不幸的是,这只适用于 PHP 5.3 及更高版本。

        提供了一个更兼容的选项作为答案 How to get the content-type of a file in PHP? 在 SO 上(虽然我发现给出的答案有点矫枉过正,但从任何标准来看都很好)。

        【讨论】:

        • 嗯,mime_content_type() 函数甚至在 PHP5 之前就已经存在,并提供与 FileInfo 扩展相同的功能,但已被弃用(不久前:)
        猜你喜欢
        • 2010-10-21
        • 2012-07-14
        • 2015-06-04
        • 2012-05-09
        • 1970-01-01
        • 1970-01-01
        • 2012-03-22
        • 2015-07-31
        • 2013-01-05
        相关资源
        最近更新 更多