对于此脚本,它会检查文件是否为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转换为图片类型?
答案 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存档 - 您会在第二次尝试解压缩文件时注意到文件已损坏。