我目前正在构建一个允许用户上传文件的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服务器上执行的,以及我用于测试目的的免费服务器。
感谢您的帮助。
答案 0 :(得分:4)
$_FILES['file']['type']
来自上传文件的浏览器,因此您根本无法依赖此值。
根据文件内容查看finfo_file
以识别文件类型。由于用户可以使用mp3扩展程序上传恶意代码,因此文件的扩展名也不可靠。