没有给出MIME类型

4

我正在构建一个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文件,但无论哪种都没有返回一个mime类型。这是文件类型的问题吗?还是我需要编辑我的xampp服务器中的.htaccess文件或MIME.types文件?此外,有更好的方法来验证上传的文件吗?请注意,这是在我的xampp服务器和我用于测试目的的免费服务器上出现的问题。谢谢帮助。
1个回答

4

$_FILES['file']['type']来自上传文件的浏览器,因此您不能完全依赖此值。

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


我该如何在Windows XAMPP环境/ Linux服务器上安装此扩展? - Andre Nagel
请参阅http://www.php.net/manual/en/fileinfo.installation.php。基本上它已经安装在Linux PHP 5.3+上。 - drew010

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接