2011-02-24 17 views
28

Duplicar posible:
Is it safe to serve an image on the web without an extension?¿Puedo usar imágenes sin extensión en <img>?

me gustaría usar algo como <img src="advertisements/12" style="border: 1px solid"> en una página. FireFox no lo mostrará, lo que me hace pensar que tengo que tener una extensión de archivo para el archivo. ¿Estoy aquí mismo (para los otros navegadores también), o a FF le gustan los tipos de mímica?

EDITAR

He intentado todo tipo de cosas y todavía no va a funcionar. Ahora coloco una extensión en el archivo correctamente (.swf para Flash, por ejemplo). Cambié el directorio, etc. etc. Cuando llamo al file_exists(), el archivo está allí, todo feliz, pero no puedo procesarlo en la página. Podría ser un .PNG en una etiqueta img o un objeto Flash. Ninguno de los dos funciona Qué estoy haciendo mal :-( Además, si cambio el nombre de un archivo no cargado al archivo que está buscando el script, funciona bien, pero los cargados no ...

+2

no envía la derecha Content-type' encabezado HTTP para el tipo de imagen es ? No creo que el navegador se preocupe por las extensiones en absoluto. –

+0

sí, puedes. pero tenga en cuenta que esto molestará a los usuarios si alguna vez deciden guardar las imágenes en sus sistemas de archivos. –

Respuesta

25

Sí, debería ser capaz de hacerlo.

Los navegadores inicialmente no miran el nombre de archivo, sino que miran el tipo MIME enumerado en el encabezado Content-type en la respuesta del servidor HTTP. Si el tipo de contenido es image/jpeg, o png o gif o lo que sea, las cosas están bien y la imagen será feliz de renderizar.

Si no hay un tipo MIME válido, algunos navegadores intentarán adivinar de qué tipo es. Observarán la extensión del objeto solicitado, o verán los primeros pocos bytes. Si eso falla, entonces obtienes un redex.

Eso solía causar algunos problemas en los primeros días de Firefox/Firebird, porque era estricto con los tipos de mime y con frecuencia se rehusaba a representar algo sin un tipo MIME válido. IE hizo una conjetura, y tantos servidores web descuidados servirían páginas que se procesarían bien en IE, pero no en otras. En estos días, sin embargo, las cosas están mucho mejor.

Por lo tanto, siempre que su servidor web esté proporcionando el tipo MIME correcto cuando se solicita el objeto img, estará listo. Si tiene problemas, verifique qué está haciendo su servidor web cuando se solicite "publicidades/12".

+2

¿Cómo encaja un redireccionamiento 302 en esto (si el img src redirige a una imagen)? – jbyrd

2

Proporcionando un tipo MIME podría ser de ayuda, aunque el servidor teóricamente debería proporcionar el correcto. Si se trata de un script PHP especializado (o similar) que está publicando la imagen, debe asegurarse de configurar el encabezado HTTP Content-Type en el tipo MIME apropiado.

Si desea evitar el uso de la etiqueta <img>, puede utilizar <div> en conjunción con los fondos de CSS, pero eso no va a ayudar si el navegador no reconoce advertisements/12 como cualquier tipo de imagen conocida.

+0

Es solo una imagen almacenada en el disco. El tipo de mime está bien en mi buscador de archivos (Nautilus) – Bojangles

+1

Comprueba el tipo de mime que aparece cuando la imagen está realmente servida. Apache y similares a menudo deciden que basado puramente en la extensión, y si no tiene uno, se predeterminará el tipo MIME a otra cosa. Pruebe darle una extensión a la imagen y vea si eso lo lleva a algún lado. Si lo hace, entonces tendrá que encontrar la forma de forzar a Apache a reconocer ese archivo como sea el que sea. – digitlworld

9

¿Qué devuelve el servidor? La extensión de archivo no se usa para nada, realmente. El navegador está buscando el encabezado Content-type, que debería ser algo así como image/jpeg o cualquier tipo de imagen que se esté publicando.

Esto se utiliza con bastante frecuencia en sitios que sirven imágenes dinámicamente, a menudo desde una base de datos. He visto muchas URL de imágenes como image.aspx?id=37 que, si bien técnicamente tiene una "extensión", en realidad no significa que sea una imagen. Todo está en los valores del encabezado HTTP.

+0

Correcto, mi respuesta anterior decía que el servidor en sí mismo no establecerá necesariamente ese encabezado correctamente si el archivo que está sirviendo no tiene una extensión reconocida. No va a leer el archivo y tratar de determinar de qué se trata. – digitlworld

+0

@Digitlworld: Es cierto que para los archivos regulares, el servidor web manejará ese tipo de cosas. Para contenido personalizado como este, el servidor deberá configurarse para saber si debe proporcionar el encabezado o la aplicación que se ejecuta en el servidor deberá hacerlo manualmente. (Por lo general, prefiero este último en mis configuraciones.) Por supuesto, la pregunta no especifica ninguna información sobre el servidor de cualquier marco de aplicación que se ejecute en él ... – David

+0

El servidor ejecuta Apache2 con PHP5. Los archivos son en realidad solo imágenes estándar o archivos Flash (.SWF). Simplemente no tienen (no tienen) una extensión. – Bojangles

1

Me encontré con problemas similares de visualización de imágenes después de cambiar el nombre de las imágenes cargadas desde formularios web. Como podría tener una mezcla de archivos gif, jpg, jpeg o png, fui a buscar las propiedades del archivo.

Lo que terminé haciendo fue verificar el tipo MIME (que normalmente está dentro de la matriz $ _FILES mientras procesaba los archivos cargados) y anexar una extensión asociada al nombre del archivo.

if($_FILES[$fieldname]['type'][$key]=='image/gif') { 
    $ext='.gif'; 
} 

if($_FILES[$fieldname]['type'][$key]=='image/jpeg') { 
    $ext='.jpg'; 
} 

if($_FILES[$fieldname]['type'][$key]=='image/pjpeg') { 
    $ext='.jpg'; 
} 

if($_FILES[$fieldname]['type'][$key]=='image/png') { 
    $ext='.png'; 
} 

List of common image mime types.

-que hizo arreglar mi problema, ya que el navegador estaba tratando de descargar mis imágenes como archivos binarios sin la extensión de nombre de archivo.

Servidor - Debian, Apache 2.2, PHP 5.3

Web Client - Kubuntu 11.10, Firefox

"anuncios/12"
Cuestiones relacionadas