2010-02-06 13 views
6

Al principio me sorprendió por qué algunos usuarios no cargaban mis archivos y descubrí que eran todos los que no usaban Chrome, que era el navegador que estaba probando.¿Por qué hay una incoherencia tipo mimo con firefox, chrome?

Básicamente estoy haciendo una verificación de archivos para asegurarme de que solo pueden cargar archivos mp3.

Esto funcionaba para chrome, pero no para firefox.

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

Esto funcionaba para firefox, pero no para Chrome.

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

¿Alguien podría explicar por qué sucede esto? Creo que ambos navegadores podrían entender cualquiera de ellos o ... ¿Hay otros navegadores de los que podría tener que preocuparme acerca de los tipos de mimos que son tan sensibles?

Editar: Si lo que Pekka sugirió es verdad, ¿cuál sería la mejor manera de verificar un cierto tipo de mimo?

+0

Re la edición: Verifique mi respuesta editada. –

+0

Tek, ¿está seguro de que "Esto estaba funcionando para Chrome, pero no para Firefox, audio/mp3"? Porque en las versiones actuales del navegador aquí, veo el reverso: el audio/mp3 funciona en Firefox pero no en Chrome. – ChrisJJ

Respuesta

5

Según w3schools, audio/mpeg es el tipo correcto. Pero no importa, los tipos MIME pueden variar, absolutamente no puede confiar en ellos al verificar archivos. Las inconsistencias son la regla, y de esperar.

para identificar un archivo MP3, puede que el paquete getid3 puede ayudarle a:

getID3() es un script PHP que extrae información útil a partir de archivos MP3 & otros formatos de archivos multimedia.

Editar: IANA tiene una lista oficial de los tipos MIME here. No hay mención de mp3 allí, así que este es un comportamiento defectuoso por parte de Chrome.

Editar 2: Su mejor apuesta en el lado del servidor para determinar el tipo MIME de un archivo es la extensión finfo. Intenta determinar el tipo de archivo mediante "detección de contenido", buscando características específicas de ciertos tipos de archivos en los primeros bytes de los datos. En este proceso, los tipos MIME también pueden variar, pero al menos son consistentes en el mismo servidor, por lo que ya no tendrá problemas con el navegador.

+1

Como Pekka señaló que la extensión fileinfo es la única manera sensata de probar el tipo de mimo. Solo me gustaría señalar que no se puede confiar realmente en el tipo de matriz de archivos. Viene del cliente y es trivial de modificar. No es a prueba de tontos, pero es mucho mejor que lo que envía el navegador. –

3

Cada navegador no podrá aplicar los estándares del W3C de forma ligeramente diferente, muy a pesar de todos los desarrolladores (#rant) ...

Basándose en la información de metadatos generados por un usuario/navegador es muy poco fiable y no se recomienda. Si este es su único mecanismo de seguridad/cordura, alguien que desee causar daños a su sistema puede ingresar manualmente el campo de tipo de metadatos con una solicitud personalizada a == "audio/mpeg" y luego cargar cualquier tipo de archivo ejecutable. Si realmente desea asegurarse de que debe examinar completamente los datos en el lado del servidor una vez que se ha cargado antes de aceptarlo en su sistema de almacenamiento/producción permanente. O en una nota menos siniestra ... un usuario con un navegador diferente al que no haya probado antes podría querer cargar un archivo mp3 legítimo pero no puede anunciar su tipo de mimo como audio/mpeg o audio/mp3 y entonces le negaría el acceso al sistema ...

-2

de etiquetas de audio

<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> 

vídeo Marcar

<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> 

Se requiere trabajar a través de todos los formatos ...

MÁS IMPORTANTE ASEGURARSE el administrador del sistema ha permitido a los TIPOS MIME PARA SU USO EN EL SERVIDOR/RAÍZ/DOMINIO. Esta es la mayor incoherencia, pero esto funciona en todos los navegadores, incluido IE.

+0

La pregunta es acerca de la carga de archivos, no elementos de medios. – Quentin

Cuestiones relacionadas