Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Fireball-CH en 11 Agosto 2007, 08:49 am



Título: Descargas de archivos
Publicado por: Fireball-CH en 11 Agosto 2007, 08:49 am
Hola!

Tengo una duda...
Tengo 1 archivo llamado video.3gp, ¿cómo puedo hacer para que cuando el usuario haga click en el link Descargar se abra directamente la ventanita de descarga (donde escribe el nombre del archivo como lo va a guardar)?

Y cómo puedo hacer eso con imágenes?
Es decir, si pongo:
  <a href="imagen.gif" target="_self">Haz click aquí para descargar la imagen</a>
no se va a descargar la imagen, se va a abrir en el explorador... ¿cómo puedo hacer para que se abra la ventana de descarga y guarde la imagen?

Espero que me haya explicado.


Título: Re: Descargas de archivos
Publicado por: дٳŦ٭ en 11 Agosto 2007, 11:17 am
Forza la descarga:

Código:
header("Content-type: application/force-download");

Saludos


Título: Re: Descargas de archivos
Publicado por: Fireball-CH en 12 Agosto 2007, 05:46 am
Ing_Amc, no se cómo utilizar eso... ¿cómo le hago?

En ver_archivos.php tengo la lista de archivos a descargar, los links son más o menos así:

  <a href="download.php?file=../pictures/<?php echo $picture; ?>" target="_self">Descargar</a>

Y en download.php tengo el sig. código:

<?php
header("Content-type: application/force-download");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($_GET["file"]));
header("Content-Disposition: filename=".basename($_GET["file"]));
?>

Pero los archivos se descargan con error! En las imágenes me dice "Vista previa no disponible", no puedo abrir los temas (.thm) y no puedo ver videos (.3gp). En pocas palabras, cualquier archivo que descargo se descarga con un peso de 0 KB!!

Con Internet Explorer ni siquiera la ventanita de descarga me aparece...




SOLUCIÓN :D
Bueno Ing_Amc, aquí dejo una solución (funciona con Internet Explorer y Firefox):
Los links en ver_archivos.php deben ser algo así:

  <a href="download.php?file=../pictures/hacker.gif" target="_self">Descargar</a>

El código de download.php debe ser:

  <?php
  header("Content-Disposition: attachment; filename=" . $_GET["file"]);
  header("Content-Type: application/octet-stream");
  header("Content-Length: " . filesize($_GET["file"]));
  readfile($_GET["file"]);
  ?>

Por cierto, el orden de los header() no afecta, verdad?
Aún así, me gustaría que me explicaras cómo usar application/force-download, por favor. Gracias.


Título: Re: Descargas de archivos
Publicado por: Fireball-CH en 12 Agosto 2007, 06:19 am
I'm sorry for writing too much :P

Ing_Amc, creo que me hacía falta la función readfile() cuando usaba application/force-download

Entonces el código me queda así:
<?php
header("Content-type: application/force-download");
header("Content-Disposition: filename=" . basename($_GET["file"]));
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . filesize($_GET["file"]));
readfile($_GET["file"]);
?>

Pero en IE sigue sin abrirme la ventanita de descarga. Ahora sólo la abre con los archivos .thm (con Firefox sí funciona). Mejor me quedo con este código:
<?php
header("Content-Disposition: attachment; filename=" . $_GET["file"]);
header("Content-Type: application/octet-stream");
header("Content-Length: " . filesize($_GET["file"]));
readfile($_GET["file"]);
?>
:D (funciona con los 2 exploradores). Saludos!


Título: Re: Descargas de archivos
Publicado por: Fireball-CH en 12 Agosto 2007, 06:55 am
Ing_Amc, tengo un problema con el código que te dije que me quedaba!!

El link es <a href="download.php?file=../pictures/hacker.gif" target="_self">Descargar</a>...
Alguna persona mala puede escribir en la URL:
  http://www.miSitio.com/users/download.php?file=archivo_a_descargar.php
el problema es que sí se descarga ese archivo!!

¿Qué puedo hacer? En mi sitio sólo quiero que se descarguen archivos .gif, .jpg, .png, .thm y .3gp.

Los .gif, .jpg y .png están en http://www.miSitio.com/pictures
Los .thm están en http://www.miSitio.com/themes
Los .3gp están en http://www.miSitio.com/videos


Título: Re: Descargas de archivos
Publicado por: дٳŦ٭ en 12 Agosto 2007, 09:47 am
Código:
download.php?file=../pictures/hacker.gif

Así te van hacer RFI. Referente a lo otro mete tus archivos a una base de datos y los llamas por un ID.

Si quieres evitar el hotlink revisa el referer y los bloqueas, si acceden directamente (sin referer) igual.

Suerte


Título: Re: Descargas de archivos
Publicado por: Fireball-CH en 18 Agosto 2007, 19:51 pm
Gracias, Ing_Amc!
Saludos!