Foros del Web » Programando para Internet » PHP »

Descargar una imagen con PHP

Estas en el tema de Descargar una imagen con PHP en el foro de PHP en Foros del Web. El concepto es sencillo, pero en la práctica no tengo ni idea de cómo empezar. Consiste en poder que al hacer clic en una imagen, ...
  #1 (permalink)  
Antiguo 12/05/2006, 12:22
Avatar de david_M_G  
Fecha de Ingreso: febrero-2005
Mensajes: 938
Antigüedad: 12 años, 10 meses
Puntos: 20
Descargar una imagen con PHP

El concepto es sencillo, pero en la práctica no tengo ni idea de cómo empezar. Consiste en poder que al hacer clic en una imagen, aparezca un diálogo del navegador para descargártela.

El enlace de descarga sobre la imagen sería algo tipo:
Código:
<a href="descargar.php?id=id_de_la_imagen"><img src...
La idea viene de haberlo visto en otras webs, así que no acepto un "imposible" por respuesta.

He buscado en las FAQs y no he encontrado nada. También he hecho uso del buscador, y sí he encontrado el mismo tema, pero sin responder.

Agradezco la ayuda.
  #2 (permalink)  
Antiguo 12/05/2006, 13:27
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Y como buscastes?

http://www.forosdelweb.com/f18/cual-mejor-metodo-para-forzar-descarga-archivo-audio-sin-problemas-355683/

Si te fijas la teoría al respecto es:

1) hacer tu consulta SQL a tu BBDD (por ese "ID" de registro u otra condición).
2) Obtener el nombre del archivo; suponemos que tu manejas sólo la referencia del nombre del archivo en tus BBDD en algún campo de esta y el archivo en sí físicamente lo tienes en el sistema de archivos del servidor). En cualquier caso si lo manejases en forma "binaria" (el archivo) el procedimiento es similar.
3) Componer las cabeceras HTTP adecuadas para la descarga.
4) Entregar el archivo al buffer de salida de PHP.

Algunas funciones que te hacen falta:
www.php.net/header
www.php.net/readfile

Pero estas funciones no sirven "solas" .. esto parte de conocer el protcolo HTTP para saber que "cabeceras" HTTP son las adecuadas para tu caso concreto .. En principio necesitas una que define el "content-type" (al formato MIME de tu imagen) .. otra para indicar que es una descarga .. otra para definir el nombre del archivo que tendrá o se ofrecerá en la descarga .. etc. (algunos de estos ejemplos los tienes en el tema que te dejé el link).

Conociendo esta "teoría" .. si el código propuesto en ese mensaje que te dejé el link no te funcionan .. podrás investigar sobre otros mejores. Recuerda que las "cabeceras" HTTP las interpretan los "clientes" (navegadores, gestores de descargas) .. NO todos se comportan igual ante las mismas cabeceras (y eso es lo que dá quebraderos de cabeza cuando la "teoría" no se comporta exactamente como esperamos .. ).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 12/05/2006, 14:25
Avatar de david_M_G  
Fecha de Ingreso: febrero-2005
Mensajes: 938
Antigüedad: 12 años, 10 meses
Puntos: 20
Busqué por descarga de archivos de imagen...

De todas formas creo que has sobreentendido que los archivos de imagen están en la base de datos. En la base de datos solo los ordeno, los memorizo con una ID, y les asigno la URL real. Las imagenes están en el FTP.

Matizo por si eso cambia algo

Gracias por la ayuda
  #4 (permalink)  
Antiguo 12/05/2006, 17:01
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Bueno, realmente no dí por hecho nada, por eso mismo como "sé" que hay dos técnicas para gestionar archivos sobre una BBDD .. preguntaba.

También confundes "están en el FTP" .. FTP es un "médio" de acceso a archivos que los "sirve" valga la rebundancia ese tipo de servidores (esto es sólo para que nos entendamos y usemos los términos adecuados para no confundir) que al final están en el sistema de archivos del servidor en general.

Lo que importa no es el "URL" de la imagen sino la ruta absoluta de la imagen. En su defecto podrías obener la imagen como archivo en sí por una conexión en FTP .. pero no es la idea si las imagenes las tienes en el mismo servidor que vas a correr tu aplicación PHP que vas a crear.

Por lo demás .. si tu tienes o sabes la ruta absoluta a tus archivos (no el URL .. ) puedes usar las técnicas y ejemplos que veras en las funciones que dejé los links. ¿Los has visto yá?

Un saludo,

Consejo:
Busqué por descarga de archivos de imagen...

Así no vas a encontrar mucho .. usa:
descarga archivos (y si es en ingles mejor .. no para este foro pero si para usar google)

(de imagen está de más .. para el caso es "un archivo" en sí .. tal vez eso es lo que te mató las busquedas ... en consecuencia reduce el campo de terminos a buscar .. lo mismo que usar "de" (artículos) no son necesarios!)
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 12/05/2006, 17:43
Avatar de david_M_G  
Fecha de Ingreso: febrero-2005
Mensajes: 938
Antigüedad: 12 años, 10 meses
Puntos: 20
Cita:
Consejo:
Busqué por descarga de archivos de imagen...

Así no vas a encontrar mucho .. usa:
descarga archivos (y si es en ingles mejor .. no para este foro pero si para usar google)

(de imagen está de más .. para el caso es "un archivo" en sí .. tal vez eso es lo que te mató las busquedas ... en consecuencia reduce el campo de terminos a buscar .. lo mismo que usar "de" (artículos) no son necesarios!)
No hombre, no fueron esas palabras exactas Pero sé que busqué por imágenes en lugar de archivos en general.

Aunque ya que estás... he conseguido hacer esto:


descargar.php
Código PHP:
<?
$id 
$_GET['id'];
if (
is_numeric($id)) {
$enlace "http://www.eldominio.com/imagenes/".$id.".gif";
header ("Content-Disposition: attachment; filename=".$id);
header ("Content-Type: image/gif");
header ("Content-Length: ".filesize($enlace));
readfile($enlace);
}
else { echo 
"La ID debe ser NUMERICA"; }
?>

El caso es que poniendo decargar.php?id=aa, me devuelve que no es numérica. Hasta aquí bien.
Si pongo descargar.php?id=1, se me descarga como un archivo GIF y todo bien, pero realmente al abrir la imagen..."Vista previa no disponible". No se ve nada.
Si pongo descargar.php?id=123981273817 (inventado) también se descarga... JARL! Y por supuesto tampoco funciona, de la misma forma que la otra... aquí algo huele mal.

Creo que es problema de la ruta, ya que me has dicho que no escribiese la URL. ¿Cómo podría ser?

PD: Antes de que me lo digas, ya he probado a abrir el archivo descargado con bloc de notas... y salen símbolos raros ;)

Gracias.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:14.