【问题标题】:mp3 upload mimetype being missed by firefox specicallymp3 上传 mime 类型被 firefox 特别遗漏
【发布时间】:2012-03-16 00:54:51
【问题描述】:

我有一个文件上传,它在除 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!非常令人沮丧,我不知道为什么会这样。有什么想法吗?

【问题讨论】:

  • 哪个给你firefox?
  • 不是版本,而是 mime 类型。

标签: php html firefox upload mp3


【解决方案1】:

文件上传的 mime 类型是完全提供信息的,而不是进一步明确(和具体)绑定什么是过去。不要依赖它。

Firefox 在这里没有做错,这是您在脚本中编写的错误期望 - 来自 PHP Manual­Docs

$_FILES['userfile']['type']

文件的 mime 类型(如果浏览器提供了此信息)。一个例子是“image/gif”。然而,这种 mime 类型在 PHP 端没有被检查,因此不要认为它的价值是理所当然的。

所以对这些信息的使用是有限制的,并不严格。

您应该记录上传的 mime 类型,因为您无法针对所有浏览器/操作系统组合进行测试。

如果您想确保它遵循 mp3 文件的约定,也有必要检查该文件。在fileinfo­Docs(适用于所有文件)旁边,还有php-readerZend_Mimme_Magic 以及许多其他与mp3 文件相关的库。

【讨论】:

  • 我不太清楚你的意思,我使用 mime 类型进行验证,我剥离了扩展名并将其重命名为 .mp3,这是不好的做法吗?否则我应该如何进行上传?
  • 然后查看 Firefox 向您的脚本发送的 mime-type (content-type) 字符串,并检查它是否在您的列表中丢失。从技术上讲,任何浏览器都可以向您发送任何类型的内容(包括application/octet-stream,它仅表示二进制文件)——无论文件是什么。如果用户选择要上传的文件,浏览器不会验证任何内容。它通常只添加底层操作系统提供的有关文件的信息。
  • 哦,好的,谢谢你的解释,所以它不可靠,dang。
【解决方案2】:

尝试使用它来获取 mime 类型

$file_info = new finfo(FILEINFO_MIME); $mime_type = $file_info->file($file);

【讨论】:

  • 我在尝试使用此功能时得到“类 'finfo' 未找到
  • 你需要安装fileinfo扩展才能运行或升级到php 5.3
猜你喜欢
  • 2016-09-26
  • 2013-05-24
  • 2019-12-17
  • 2013-01-05
  • 2022-12-15
  • 2010-10-21
  • 2012-05-09
  • 1970-01-01
相关资源
最近更新 更多