没有给出mime类型

时间:2012-10-22 22:52:21

标签: php mime-types

我目前正在构建一个允许用户上传文件的PHP应用程序。我目前在上传页面,但我的验证系统不起作用。我正在使用此系统将文件验证为音频文件。

// Set our file name and extension
$fname     = $_FILES['file']['name'];
$extension = strtolower(substr($fname, strpos($fname, '.') + 1));

// Check file
if ($extension == 'mp3' && $_FILES['file']['type'] == 'audio/mpeg') {
    //File is valid mp3
} else {
    //File is invalid
}

现在这不起作用,但奇怪的是,当我回显$_FILES['file']['type']时,它不会回显音频文件的mime类型。当我为任何其他文件类型执行此操作时,它会成功回显它。

它不仅为音频文件提供mime类型。我已经尝试过使用WAV和M4A文件,它也没有返回任何一个。它是文件类型的东西,还是我必须编辑我的xampp服务器中的.htaccess文件或MIME.types文件。还有更好的方法可以验证上传的文件吗?

另请注意,它是在我的xampp服务器上执行的,以及我用于测试目的的免费服务器。

感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

$_FILES['file']['type']来自上传文件的浏览器,因此您根本无法依赖此值。

根据文件内容查看finfo_file以识别文件类型。由于用户可以使用mp3扩展程序上传恶意代码,因此文件的扩展名也不可靠。