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 文件,但它也不会返回任何这些文件。是文件类型的问题,还是我必须在我的 xampp 服务器中编辑 .htaccess 文件或 MIME.types 文件。还有更好的方法来验证上传的文件吗?

另请注意,它在我的 xampp 服务器和我用于测试目的的免费服务器上执行此操作。

谢谢您的帮助。

4

1 回答 1

4

$_FILES['file']['type']来自上传文件的浏览器,所以你根本不能依赖这个值。

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

于 2012-10-22T22:55:22.297 回答