Php 应用程序/强制下载

Php 应用程序/强制下载,php,scripting,zip,mime-types,Php,Scripting,Zip,Mime Types,我正在创建一个只上载zip文件的脚本,我已准备好以下验证: if($itemtype != "application/x-zip-compressed" && $itemtype != "application/zip" && $itemtype != "application/octet-stream") { throw new exception("Your file should be a zip file!"); } 但是我有一个文件类型为fi

我正在创建一个只上载zip文件的脚本,我已准备好以下验证:

if($itemtype != "application/x-zip-compressed"
   && $itemtype != "application/zip" && $itemtype != "application/octet-stream") {
  throw new exception("Your file should be a zip file!");
}

但是我有一个文件类型为file typeapplication/force download的文件,但是当我在mime类型中查找时,我找不到它,我是否仍然应该将它添加到验证中(参见上面的代码)?我试图上传的文件应该是普通的zip文件。。。这就是我所想的

修复示例中的代码,并使您的问题更加清楚

也就是说,不清楚您是在验证上传的文件还是下载的文件


我想大胆猜测一下,你可能想提供一个已经上传的文件。Mimetypes是一种非常糟糕的验证方法,但您的问题实际上可能在于您的Web主机。在过去类似的情况下,我看到共享主机提供商未经我的许可插入各种头文件,导致的问题与您可能遇到的类似,如果您的问题更准确的话。不幸的是,在这种情况下,解决方案是用php重新编写下载的整个服务过程,这本身就有一大堆问题。

您需要检查文件扩展名,而不是内容类型。特别是,因为不同的浏览器可以发送不同的内容类型。

我意识到,这已经过期很久了,但由于我在搜索时偶然发现了这一点,不妨向其他任性的旅行者指出。。。检查扩展并不比检查浏览器提供的内容类型好。两者都很容易被客户机操纵,因此不可信任。如果您想要一个半可靠的东西,请使用Fileinfo扩展名。它将尝试根据文件内容推断类型,而不是像这样的任何元数据。