如何让我的检查MIME类型脚本工作? (PHP)

时间:2010-04-05 16:34:43

标签: php

对于此脚本,它会检查文件是否为microsoft words doc或ppt。 我不确定为什么它没有运行,因为它适用于图像MIME和text / plain。

我正在使用PHP 5.3.1,所以它应该已经安装了所有MIME类型吗?

我正在上传单词和powerpoint 2007。

//Does the file have the right MIME type?
if ($_FILES['userfile']['type'] !='application/msword') {
    echo 'Problem: file is not words doc.';
    exit;
}

如果我无法上传msword,有没有办法将单词doc转换为图片类型?

2 个答案:

答案 0 :(得分:3)

图像和纯文本文件与专有文件非常不同。一般来说,PHP / Web浏览器不支持所有专有文件格式,因此该类型可能只是作为八位字节流返回。

Web浏览器是向PHP发送mime类型的系统的一部分。您的浏览器可能无法正确发送Microsoft Word mime类型。 (但是说“正确”可能是错误的,因为我不希望任何浏览器尝试识别单词文件)

正确发送图像mime类型的原因是因为图像是相当标准的。你有jpg,gif等,这就是它。但是,这只是因为它们是标准的,开放的格式,并且已经存在了很长时间。

其他格式如.doc,.psd等不太可能被发送,因为它们不是真正的标准。

答案 1 :(得分:2)

正如@chacha已经说过的,浏览器很可能无法识别Word文件的MIME类型,因此不会将其与请求一起发送。它可能取决于客户端计算机上安装的应用程序。任何浏览器都可能识别图像等基本文件类型。

出于安全考虑,检查MIME类型无论如何都是无用的,因为它可以由客户端伪造。

如果我是你,我根本不会做任何检查(或者,如果你想在用户上传错误文件时警告用户,只检查文件扩展名)并在处理时要非常小心文件。如果我没记错的话,新的Office 2007文件是包含XML和其他文件的ZIP存档 - 您会在第二次尝试解压缩文件时注意到文件已损坏。