Forzar Descarga PHP

Iniciado por Urpem, 11 Noviembre 2009, 23:48 PM

0 Miembros y 1 Visitante están viendo este tema.

Urpem

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 (php) [Seleccionar]
<?php
    $f 
$_GET["f"];
    
header("Content-type: application/octet-stream");
    
header("Content-Disposition: attachment; filename=\"$f\"\n");
    
$fp=fopen("$f""r");
    
fpassthru($fp);
?>


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:

CitarForzar 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

Urpem

#1
Ultimamente me pasa que me autorespondo 10min despues de exponer el problema xD

Encontre un modo de que me funcionara. Puse:

Código (php) [Seleccionar]

<?php

$f 
$_GET["f"];

header('Content-type: application');
header('Content-Disposition: attachment; filename='.$f);

readfile($f);
?>


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

WHK

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:

AddType application/octet-stream .pdf

Urpem

Cita de: 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:

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.

WHK

Hola, creas un archivo llamado ".htaccess" y pones dentro de ese archivo:

CitarAddType 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.

Urpem

Muchas gracias, ahora ya lo tengo todo correcto. ::)