Foros del Web » Programando para Internet » PHP »

Forzar descarga de PDF

Estas en el tema de Forzar descarga de PDF en el foro de PHP en Foros del Web. Hola! Estoy intentando hacer un enlace que permita descargar archivos pdf. El archivo se carga y va a parar a una carpeta y no siempre ...
  #1 (permalink)  
Antiguo 25/06/2012, 21:51
 
Fecha de Ingreso: agosto-2003
Mensajes: 524
Antigüedad: 20 años, 8 meses
Puntos: 5
Forzar descarga de PDF

Hola!

Estoy intentando hacer un enlace que permita descargar archivos pdf.
El archivo se carga y va a parar a una carpeta y no siempre tiene el mismo nombre.

Lo hice de esta manera:

Código PHP:
<?php
if(isset($_GET['id']))
    
$sql="SELECT * FROM `noticias` WHERE `id`={$_GET['id']}";
else
    die(
'error');

$noticias$rs->get_object_list($sql);


foreach(
$noticias $not){  

//ruta donde se almacena el pdf
//$not->id  es el número de id del registro
$pdf="archivos/noticias/$not->id/"?>  

<a href="<?php echo $pdf ?>">bajar PDF</a>

<?php ?>
con ese código me aparece lo siguiente


Index of /web/archivos/noticias/4

Parent Directory
archivo.pdf

pero necesito que se descargue directamente.

Espero me puedan ayudar, desde ya muchas gracias!
__________________
Saludos!!!
Maru.-
  #2 (permalink)  
Antiguo 26/06/2012, 03:49
 
Fecha de Ingreso: noviembre-2010
Ubicación: Munich - Alemania
Mensajes: 76
Antigüedad: 13 años, 5 meses
Puntos: 7
Respuesta: Forzar descarga de PDF

Necesitas otro archivo que haga esa función te dejo un ejemplo:

Código PHP:
<?php
if(isset($_GET['id']))
    
$sql="SELECT * FROM `noticias` WHERE `id`={$_GET['id']}";
else
    die(
'error');

$noticias$rs->get_object_list($sql);


foreach(
$noticias $not){  

//ruta donde se almacena el pdf
//$not->id  es el número de id del registro
$pdf="archivos/noticias/$not->id/"?>  

<a href="downloader.php?id=<?php echo $pdf ?>">bajar PDF</a>

<?php ?>
downloader.php

Código PHP:

<?php

$archivo 
$_GET["id"];

$archivos = array("jpeg""jpg""gif""zip""rar""doc""pdf");
if((
strpos($archivo,"/")) != false){
    die(
"Formato no admitido");
}

$tmpexplode("."$archivo);

//$ext = strtolower($tmp[count($tmp)-1]);
$ext $tmp[1];
//echo $tmp[1];

if(!in_array($ext,$archivos)){
    die(
"<b>ERROR!</b> no es posible descargar $archivo");
}

$nombre basename($archivo);
//$temporal = "archivos/". "$archivo";
$temporal $archivo;

if(
file_exists($temporal)){
    
header ("Content-Disposition: attachment; filename=$nombre\n\n");
    
header("Content-Type: application/force-download");
    @
readfile($temporal);
}else {
    die(
"<b>ERROR!</b> no es posible descargar $temporal el archivo no existe"); 
}

?>
Espero que te funcione.

Saludos,
  #3 (permalink)  
Antiguo 26/06/2012, 12:19
 
Fecha de Ingreso: agosto-2003
Mensajes: 524
Antigüedad: 20 años, 8 meses
Puntos: 5
Respuesta: Forzar descarga de PDF

Muchas gracias por tu respuesta jeixuxspn!!!

Intenté con tu ejemplo pero me sale siempre "Formato no admitido", probé con

Código PHP:
if((strpos($archivo,"/")) != false){
    echo 
$archivo;
    die(
"Formato no admitido"); 
y la ruta sale bien archivos/noticias/4/Formato no admitido

pero por alguna razón no reconoce el formato. Subí pdf y rar y con los dos sucede lo mismo.
__________________
Saludos!!!
Maru.-
  #4 (permalink)  
Antiguo 27/06/2012, 00:32
 
Fecha de Ingreso: noviembre-2010
Ubicación: Munich - Alemania
Mensajes: 76
Antigüedad: 13 años, 5 meses
Puntos: 7
Respuesta: Forzar descarga de PDF

Cita:
Iniciado por Maru77 Ver Mensaje
Muchas gracias por tu respuesta jeixuxspn!!!

Intenté con tu ejemplo pero me sale siempre "Formato no admitido", probé con

Código PHP:
if((strpos($archivo,"/")) != false){
    echo 
$archivo;
    die(
"Formato no admitido"); 
y la ruta sale bien archivos/noticias/4/Formato no admitido

pero por alguna razón no reconoce el formato. Subí pdf y rar y con los dos sucede lo mismo.
Que raro por que yo lo probé y a mi me funciona bien, prueba quitando estas lineas a ver que pasa:

Código PHP:

$archivos 
= array("jpeg""jpg""gif""zip""rar""doc""pdf");
if((
strpos($archivo,"/")) != false){
    die(
"Formato no admitido");

Realmente a ti no te hace falta hacer esa comprobación, ya que tu generas los pdf's y en teoría siempre recibes el mismo tipo de archivo.

Saludos,
  #5 (permalink)  
Antiguo 27/06/2012, 12:17
 
Fecha de Ingreso: agosto-2003
Mensajes: 524
Antigüedad: 20 años, 8 meses
Puntos: 5
Respuesta: Forzar descarga de PDF

Probé quitando ese segmento del código, en este caso realiza una descarga, de un archivo .file y toma como archivo al id, es decir si la descarga corresponde a la ruta archivos/noticias/3, me descarga un archivo: 3.file

No está capturando el archivo pdf.
__________________
Saludos!!!
Maru.-
  #6 (permalink)  
Antiguo 27/06/2012, 14:26
 
Fecha de Ingreso: noviembre-2010
Ubicación: Munich - Alemania
Mensajes: 76
Antigüedad: 13 años, 5 meses
Puntos: 7
Respuesta: Forzar descarga de PDF

Pues ese el problema, tu código te está devolviendo un archivo de tipo .file y no un .pdf, ahora entiendo por qué te daba el error de formato no válido. Como estás generando el pdf, es decir que framework estás usando? antes de probar a forzar la descarga, podías visualizar bien los pdf's?

Saludos,
  #7 (permalink)  
Antiguo 27/06/2012, 20:04
 
Fecha de Ingreso: agosto-2003
Mensajes: 524
Antigüedad: 20 años, 8 meses
Puntos: 5
Respuesta: Forzar descarga de PDF

El pdf lo cargo desde un cms que programé y si voy a la carpeta indicada el pdf se abre correctamente, es decir que no se perdió la extensión ni nada por el estilo.

Saludos!
__________________
Saludos!!!
Maru.-
  #8 (permalink)  
Antiguo 27/06/2012, 21:13
 
Fecha de Ingreso: agosto-2003
Mensajes: 524
Antigüedad: 20 años, 8 meses
Puntos: 5
Respuesta: Forzar descarga de PDF

Este es el código que uso para cargar los archivos

Código PHP:
if (isset ($_FILES["archivos"])) {
    
$tot count($_FILES["archivos"]["name"]);
    for (
$i 0$i $tot$i++){
    
$name $_FILES["archivos"]["name"][$i];
    if (
$_FILES["archivos"]["error"][$i] > 0){
        
$msg "Error: " $_FILES["archivos"]["error"][$i] . "<br />";
        
$tipo="error";
    }elseif(
$_FILES["archivos"]["size"][$i] > 5000000){
        
$msg="Tamaño_maximo_5_mb";
        
$tipo="error";
    }elseif(
$name){
        
$tab=$_GET['tab'];
        
$ruta="../archivos";
        if(!
is_dir($ruta)){
            
mkdir($ruta);
        }
        
$ruta.= "/".$tab;
        if(!
is_dir($ruta)){
            
mkdir($ruta);
        }
        
$ruta .= "/".$id;
        if(!
is_dir($ruta)){
            
mkdir($ruta);
        }
        
$ruta.= "/".$name;
        
$archivo=$_FILES['archivos']['tmp_name'][$i];
        if (
move_uploaded_file($archivo$ruta)){
           
$msg"Archivo_Subido";
           
$tipo="exito";
        }else{
           
$msg"Error:_No_se_pudo_guardar";
           
$tipo="error";
        } 
    }
    }

se podría hacer de alguna manera que guarde el archivo con el mismo nombre??? porque solo iría un archivo por registro, quedaría algo así:

novedades/noticias/1/miarchivo.pdf
novedades/noticias/2/miarchivo.pdf
...
__________________
Saludos!!!
Maru.-
  #9 (permalink)  
Antiguo 28/06/2012, 06:02
 
Fecha de Ingreso: noviembre-2010
Ubicación: Munich - Alemania
Mensajes: 76
Antigüedad: 13 años, 5 meses
Puntos: 7
Respuesta: Forzar descarga de PDF

Hola,

Había pensado que generabas tus pdf's, a partir de datos obtenidos de una BBDD, pero por lo que veo los recibes en un formulario. Que es lo que hace tu aplicación exactamente?

Conozco una clase muy buena que se llama dompdf, con la que te solucionarian casi todos tus problemas, esta clase te permite generar pdf a partir de texto plano o contenido html, luego en la configuración puedes indicar si quieres que el pdf se visualize en el navegador, o como es tu caso que se pueda descargar, también puedes indicar el nombre de salida que tendrá.

Te dejo este enlace, donde también se explica como forzar la descarga de un archivo: http://www.comolohago.cl/2009/01/12/...us-sitios-web/

Saludos,

Última edición por jeixuxspn; 28/06/2012 a las 06:51
  #10 (permalink)  
Antiguo 28/06/2012, 13:01
 
Fecha de Ingreso: agosto-2003
Mensajes: 524
Antigüedad: 20 años, 8 meses
Puntos: 5
Respuesta: Forzar descarga de PDF

jeixuxspn, mil gracias por tu ayuda!!!
finalmente lo resolví renombrando el archivo, de esta manera tu script funciona.

Saludos!!!
__________________
Saludos!!!
Maru.-

Etiquetas: pdf, registro, sql
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 15:45.