Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Urpem en 11 Noviembre 2009, 23:48 pm



Título: Forzar Descarga PHP
Publicado por: Urpem en 11 Noviembre 2009, 23:48 pm
Hola, estoy haciendo una pàgina en la que tengo que poder descargar unos ficheros PDF y otros directamente.

Buscando información encontré en otra pagina:

La página llamada descargas.php le paso la ruta relativa por el enlace
Código
  1. <?php
  2.    $f = $_GET["f"];
  3.    header("Content-type: application/octet-stream");
  4.    header("Content-Disposition: attachment; filename=\"$f\"\n");
  5.    $fp=fopen("$f", "r");
  6.    fpassthru($fp);
  7. ?>

El caso es que hace el intento de descargar el archivo pero lo descarga corrupto.

Entonces por aqui en un el post de "pequeños trucos en PHP" encontré esto:

Citar
Forzar descarga
Forzar la descarga de un archivo desde PHP en un navegador

Código

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


Pero incluso cambiando esa cabecera, se me siguen descargando corruptos los ficheros.

¿Alguien tiene idea de como arreglar eso? O quizas haya otro modo de hacerlo.

Gracias


Título: Re: Forzar Descarga PHP
Publicado por: Urpem en 12 Noviembre 2009, 00:52 am
Ultimamente me pasa que me autorespondo 10min despues de exponer el problema xD

Encontre un modo de que me funcionara. Puse:

Código
  1. <?php
  2.  
  3. $f = $_GET["f"];
  4.  
  5. header('Content-type: application');
  6. header('Content-Disposition: attachment; filename='.$f);
  7.  
  8. ?>
  9.  
Probé con: header('Content-type: application/pdf'); pero limitaba las descargas a los pdf y aun asi no aceptaba todos los pdf. Asi que quité el "/pdf" y ahora va todo.

y otra cosa que hacia mal era que le pasaba el nombre del fichero sin tener en cuenta mayusculas y minusculas, es estricto con eso.


Saludos


Título: Re: Forzar Descarga PHP
Publicado por: WHK en 12 Noviembre 2009, 01:50 am
que pasa si te solicito un archivo asi?
index.php?f=index.php
o
index.php?f=coneccion_db.php

Lo que podrías hacer mejor es alojar los pdf en un solo directorio y ponerle este archivo .htaccess:

Código:
AddType application/octet-stream .pdf


Título: Re: Forzar Descarga PHP
Publicado por: Urpem en 12 Noviembre 2009, 03:17 am
que pasa si te solicito un archivo asi?
index.php?f=index.php
o
index.php?f=coneccion_db.php

Lo que podrías hacer mejor es alojar los pdf en un solo directorio y ponerle este archivo .htaccess:

Código:
AddType application/octet-stream .pdf

Se que eso es un fallo de seguridad. No acabo de entender eso del .htaccess pero de todas formas no quiero limitar las descargas a un solo tipo de fichero, sino a cualquier que le pidiera.

Aun asi, ejecuto esa pagina en un frame, asi que no se muestra la direccion directamente para modificarla.


Título: Re: Forzar Descarga PHP
Publicado por: WHK en 12 Noviembre 2009, 03:24 am
Hola, creas un archivo llamado ".htaccess" y pones dentro de ese archivo:

Citar
AddType application/octet-stream .pdf .doc .odt .loquesea

Despues pones ese archivo dentro del directorio donde estarán los archivos y ya. También se aplicará a los subdirectorios.


Título: Re: Forzar Descarga PHP
Publicado por: Urpem en 12 Noviembre 2009, 15:21 pm
Muchas gracias, ahora ya lo tengo todo correcto. ::)