为什么有一个mime类型与firefox,chrome不一致?

时间:2010-02-06 22:23:44

标签: php

我一开始很困惑为什么我的文件没有为某些用户上传,我发现每个人都没有使用chrome,这是我正在测试的浏览器。

基本上我正在进行文件检查以确保它们只能上传mp3。

这适用于chrome,但不适用于firefox。

if ($_FILES['uploaded']['type']=="audio/mp3")

这适用于firefox,但不适用于chrome。

$_FILES['uploaded']['type']=="audio/mpeg"

有人可以解释为什么会这样吗?我认为两种浏览器都能理解或者......有没有其他浏览器我可能需要担心像这样的敏感mime类型?

编辑:如果Pekka建议的是真的,那么检查某种哑剧类型的最佳方法是什么?

3 个答案:

答案 0 :(得分:5)

根据w3schoolsaudio/mpeg是正确的类型。但是没关系,MIME类型可能会有所不同,在检查文件时绝对不能依赖它们。不一致是规则,也是可以预期的。

要识别MP3文件,getid3包可以帮助您:

  

getID3()是一个PHP脚本,可以从MP3和MP3中提取有用的信息。其他多媒体文件格式。

修改:IANA有一个正式的MIME类型列表here。在那里没有提到mp3,所以这是Chrome的一部分。

编辑2:您最好在服务器端下注以确定文件的MIME类型是finfo扩展名。它试图通过“内容嗅探”来确定文件的类型,在数据的前几个字节中查找某些文件类型的特定特征。在此过程中,MIME类型也可能有所不同,但至少它们在同一台服务器上是一致的,因此您不会再出现浏览器问题。

答案 1 :(得分:3)

每个浏览器可能会略微不同地实现W3c标准,这让所有开发人员感到非常懊恼(#rant)......

依赖用户/浏览器生成的元信息非常不可靠,不推荐使用。如果这是您唯一的安全/健全机制,那么希望对您的系统造成伤害的人可以手动输入带有自定义请求的元类型字段==“audio / mpeg”,然后上传任何类型的可执行文件。如果您确实希望在将数据接收到永久存储/生产系统之前必须完全检查服务器端的数据。或者在一个不那么险恶的音符上......一个你以前没有测试过的不同浏览器的用户可能想要上传一个合法的mp3文件,但它可能不会宣布它的mime类型为audio / mpeg或audio / mp3然后你会拒绝他们访问到系统......

答案 2 :(得分:-2)

音频标签

<audio controls="controls" autoplay="true">
                        <source id="webm" src="Mash Up 2011 19 songs in 1 DJ Got Us Falling In Love Mandu DeeJay Remix.ogg" type="audio/ogg" />
                        <source id="webm" src="Mash Up 2011 19 songs in 1 DJ Got Us Falling In Love Mandu DeeJay Remix.mp3" type="audio/mp3" />
                        <source id="webm" src="Mash Up 2011 19 songs in 1 DJ Got Us Falling In Love Mandu DeeJay Remix.webm" type="audio/webm" />
                        <!--[if lt IE 9]>
                        <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" width="150" height="38" id="niftyPlayer1" align="right">
                        <param name=movie value="niftyplayer.swf?file=Mash Up 2011 19 songs in 1 DJ Got Us Falling In Love Mandu DeeJay Remix.mp3&as=1">
                        <param name=quality value=high>
                        <param name=bgcolor value=#471313>
                        <embed src="niftyplayer.swf?file=Mash Up 2011 19 songs in 1 DJ Got Us Falling In Love Mandu DeeJay Remix.mp3&as=1" quality=high bgcolor=#471313 width="150" height="38" name="niftyPlayer1" align="right" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer">
                        </embed>
                        </object>
                        <!--<![endif]-->
                    </audio>

视频标记

<video width="400" height="300" controls="controls" poster="img/poster.png"  >
            <source id="3gp" src="wedding1.3gp" type="video/3gp" />
            <source id="mp4" src="perfectparties/weddingDroid.mp4" type="video/mp4" />
            <source id="webm" src="wedding1.webm" type="video/webm" />
            <source id="mp4" src="perfectparties/wedding1.mp4" type="video/mp4" />
            <source id="ogv" src="perfectparties/wedding1.ogv" type="video/ogv" />

            <!--[if lt IE 9]>
            <object id="FlashID" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="400" height="300">
              <param name="autoplay" value="false">
              <param name="movie" value="wedding1.swf">
              <param name="quality" value="high">
              <param name="wmode" value="opaque">
              <param name="swfversion" value="6.0.65.0">
              <param name="expressinstall" value="Scripts/expressInstall.swf">
              </object>
              <!--<![endif]-->
</video>


<script type="text/javascript">
swfobject.registerObject("FlashID");
</script>

需要处理所有格式...

最重要的是要确保您的系统管理员允许在服务器/ ROOT / DOMAIN上使用MIME类型。这是最大的不一致,但这适用于所有浏览器,包括IE。