我有一个文件上传,它除了firefox之外的所有东西都很好用,它一直说不支持mimetype。这是我的代码:
if(isset($_POST[submitfile]))
{
$uploadedsong = $_FILES['soup']['tmp_name'];
$mimetype = $_FILES['soup']['type'];
if($mimetype=="audio/mpeg"||$mimetype=="audio/x-mpeg-3"||$mimetype=="audio/mp3"||$mimetype=="audio/x-mpeg"||$mimetype=="audio/x-mp3"||$mimetype=="audio/mpeg3"||$mimetype=="audio/x-mpeg3"||$mimetype=="audio/mpg"||$mimetype=="audio/x-mpg"||$mimetype=="audio/x-mpegaudio")
{
这允许每个浏览器上传,除了Firefox!非常令人沮丧,我不知道为什么会这样。有什么想法吗?
答案 0 :(得分:2)
文件上传的mime类型是完全信息性的,并没有进一步明确(和特别)绑定什么。不要依赖它。
Firefox在这里没有做错,这是你编写到脚本中的错误期望 - 来自PHP ManualDocs:
$_FILES['userfile']['type']
文件的mime类型,如果浏览器提供此信息。一个例子是“image / gif”。但是,在PHP方面没有检查这个mime类型,因此不会将其值视为理所当然。
所以这些信息的使用是有限的,并不严格。
您应该记录上传的mime类型,因为您无法测试所有浏览器/操作系统组合。
如果要确保文件遵循mp3文件的约定,也必须检查文件。在fileinfoDocs(适用于所有文件)旁边,有php-reader和Zend_Mimme_Magic
以及许多其他相关库的mp3文件。
答案 1 :(得分:1)
尝试使用此方法获取mime类型
$file_info = new finfo(FILEINFO_MIME);
$mime_type = $file_info->file($file);