如何在PHP中检查上传文件的文件类型?

Dar*_*ein 47 php validation file-upload mime-types

在PHP网站上,他们建议的唯一真实检查是使用is_uploaded_file()move_uploaded_file(),在这里.当然,出于各种原因,您通常不希望用户上传任何类型的文件.

因此,我经常使用一些"严格"的mime类型检查.当然这是非常有缺陷的,因为mime类型通常是错误的,用户无法上传他们的文件.伪造和/或改变也很容易.除此之外,每个浏览器和操作系统都以不同的方式处理它们.

另一种方法是检查扩展,当然比mime类型更容易改变.

如果你只想要图像,使用类似的东西getimagesize()会起作用.

那么其他类型的文件呢?PDF,Word文档或Excel文件?甚至是文本文件?

编辑:如果你没有mime_content_typeFileinfo和系统("file -bi $ uploadedfile")给你错误的文件类型,还有哪些其他选项?

dav*_*avr 33

看一下mime_content_typeFileinfo.这些是内置的PHP命令,用于通过查看文件的内容来确定文件的类型.另外还要检查上面两页的评论,还有一些其他好的建议.

我个人幸运地使用了一些基本的东西system("file -bi $uploadedfile"),但我不确定这是不是最好的方法.

  • system("file -bi - ".escapeshellarg($ uploadedfile))更安全. (19认同)
  • 我投了反对票,因为您实际上并没有提供演示代码片段和参考代码,这些代码在其自己的文档页面上没有演示片段。请更新您的答案和回复,如果有效,我会很乐意投票。 (2认同)

Sud*_*Def 15

恕我直言,所有MIME类型的检查方法都没用.

假设你有哪个应该有MIME类型application/pdf.标准方法试图找到看起来像PDF标题的东西(%PDF-或类似的东西),并且它们将成功返回'好吧,好像这是一个PDF文件'.但实际上这并不意味着什么.您可以上传仅包含的文件%PDF-1.4,它将通过MIME检查.

我的意思是如果文件具有预期的MIME类型 - 它将始终传递MIME类型检查,否则结果是未定义的.