2011-06-28 19 views
8

Tengo una página en mi sitio, que muestra algunas imágenes que se producen mi PHP. Cuando hago clic derecho en una imagen y hago clic en Guardar imagen, obtengo como nombre predeterminado el nombre del archivo php utilizado para generar la imagen.¿Cómo configuro el nombre predeterminado 'guardar imagen como' para una imagen generada en PHP?

Este es por ejemplo el código HTML para la imagen:

<img src="picture_generator.php?image_id=5&extension=.png"> 

y el nombre que recibo es: picture_generator.php.png

¿Hay una manera de establecer este nombre a una predeterminada ?

Gracias de antemano

Respuesta

4

Puede intentar establecer el nombre del archivo utilizando los encabezados HTTP, pero no todos los navegadores lo respetan.

El truco más simple es extender el URL para que la última parte contiene el nombre del archivo deseado:

<img src="picture_generator.php/desiredfilename.jpg?image_id=5&extension=.png&name=desiredfilename.jpg"> 

Nota También he añadido el nombre del archivo al final de la cadena de consulta (el name no lo hace realmente importa) ya que algunos navegadores usan esa parte.

Dependiendo de la configuración de su servidor, esto funcionará inmediatamente sin ninguna configuración especial (no mod_rewrite ni nada de eso). Puede verificar si funciona en su servidor simplemente agregando "/foo" a cualquier URL PHP de su sitio. Si ves el resultado de tu PHP, todo está bien. Si ve un error 404, entonces la configuración de su servidor no puede tratar con tales URL.

+0

No, desafortunadamente recibí la página de error 404. – novellino

+0

Oups siento mi culpa. Funciona bien para todos los navegadores. ¡¡Muchas gracias!! – novellino

+0

Tenga en cuenta que esta solución se puede romper cuando mueve su código a otro servidor, ya que depende de cómo el servidor web y el intérprete de PHP estén trabajando juntos. FYI, en su script PHP puede encontrar ese sufijo en la variable '$ _SERVER [" PATH_INFO "]' [[docs] (http://php.net/manual/en/reserved.variables.server.php)] –

1

En el archivo picture_generator.php que necesitan para agregar un encabezado con el nombre. como

header("Content-Disposition: attachment; filename=\"myfile.png\""); 
+1

¿Estás seguro de que debe ser "archivo adjunto"? ¿No haría eso que el navegador intente descargar el archivo en lugar de mostrarlo? – Crashspeeder

+0

lo siento, estaba copiando desde mi aplicación de descarga ... Quise eliminarlo. no, attchment force download, pero de lo contrario, debería funcionar (una vez eliminado) – BugFinder

+0

Muchas gracias. ¡Funciona así! – novellino

9

le puede proporcionar en la cabecera HTTP Content-Disposition:

header('Content-Type: image/png'); 
header('Content-Disposition: inline; filename="' . $filename . '"'); 

Sin embargo, algunos navegadores (Internet Explorer) es decir, son propensos a ignorar esta cabecera. La solución más a prueba de balas es forge forge la URL y hacer que el navegador crea que está descargando un archivo estático como /images/5/foo.png mientras que la ruta real detrás de las escenas es /picture_generator.php?image_id=5&extension=.png. Esto se puede lograr mediante algunos módulos de servidor web como Apache's mod_rewrite.

+0

Gracias por la repetición. Intenté esto pero no funcionó. El archivo adjunto en lugar de en línea se adapta mejor. – novellino

+0

Esto funciona muy bien para el navegador de Android. Estaba teniendo problemas para guardar imágenes con la extensión .php. Esto lo solucionó. – MrZander

+0

Eso funciona perfectamente gracias –

Cuestiones relacionadas