PHP - Problema al descargar PDF con PHP

 
Vista:
sin imagen de perfil
Val: 22
Ha aumentado su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

Problema al descargar PDF con PHP

Publicado por Felipe (12 intervenciones) el 27/09/2019 14:32:37
Hola!

Estoy intentando descargar los archivos que voy subiendo a mi proyecto específicamente archivos PDF, al parecer todo funciona bien, los archivos se descargan correctamente, pero aquí viene el problema... intento abrir los archivos con Acrobat y me aparece este error:

a

También al abrir el archivo descargado con Chrome aparece esto:

b

Sin embargo, al abrir el archivo con Lector de Windows 10 puedo visualizar correctamente el contenido de mi archivo descargado, algo que me parece extraño... Existe alguna solución a estos problemas???

Adjunto el código que estoy utilizando:

PHP:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public function descargar(){
    if(!empty($_GET['file'])){
        $filename = basename($_GET['file']);
        $filepath = 'uploads/docs/'.$filename;
 
        if(!empty($filename) && file_exists($filepath)){
            //DEFINIR HEADERS
            header('Content-Description: File Transfer');
            header('Content-Type: application/octet-stream');
            header('Content-Disposition: attachment; filename="'.$filename.'"');
            header('Expires: 0');
            header('Cache-Control: must-revalidate');
            header('Pragma: public');
            header('Content-Lenght: '.filesize($filepath));
            header('Content-Transfer-Encoding: binary');
            readfile($filepath);
            exit;
        }
        else{
            echo "<h1>El archivo no existe.</h1>";
        }
    }
}

HTML:

1
<a href="<?=base_url?>documento/descargar&file=<?=$doc->nombreArchivo?>"><img class="icon-download" src="<?=base_url?>assets/images/icondownload.png" alt="GearDownload"></a>

Gracias por sus respuestas :)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kathyu
Val: 1.802
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Problema al descargar PDF con PHP

Publicado por Kathyu (905 intervenciones) el 27/09/2019 15:37:07
Ya probó ver los PDF's antes y de esa vista descargarlos?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 22
Ha aumentado su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

Problema al descargar PDF con PHP

Publicado por Felipe (12 intervenciones) el 27/09/2019 16:27:43
Hola, si te refieres a que pueda visualizar los archivos originales que tengo dentro de mi proyecto si, los puedo visualizar sin problemas con cualquier programa y navegador... el problema se me presenta cuando quiero descargar esos archivos. Igualmente tengo esta función que me debería permitir visualizar los PDF en vista previa en Chrome, pero tampoco me deja cargarlos y sale el mismo error de la segunda imagen.

Función para visualizar archivo PDF:

1
2
3
4
5
6
7
8
9
10
11
public function ver(){
    if(!empty($_GET['file'])){
        $filename = basename($_GET['file']);
        $filepath = 'uploads/docs/'.$filename;
 
        if(!empty($filename) && file_exists($filepath)){
            header("Content-Type: application/pdf");
            readfile($filepath);
        }
    }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kathyu
Val: 1.802
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Problema al descargar PDF con PHP

Publicado por Kathyu (905 intervenciones) el 27/09/2019 17:55:45
Y si los baja por medio de la función que le da el navegador pasa el mismo error? ==> (Porque no dejarlo así??)

Porque todo apunta a que la función de descarga es la que esta "corrompiendo" el archivo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 22
Ha aumentado su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

Problema al descargar PDF con PHP

Publicado por Felipe (12 intervenciones) el 27/09/2019 19:43:20
voy a probar de esa forma, así no le daría tantas vueltas al asunto... el tema es que mi función 'ver' tampoco me muestra mi archivo, pero le daré unas vueltas a tu consejo a ver si me resulta. Muchas gracias :D
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kathyu
Val: 1.802
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Problema al descargar PDF con PHP

Publicado por Kathyu (905 intervenciones) el 27/09/2019 21:29:24
Pero solo debe hacer un ancla al archivo? Ya con eso lo debería ver en el navegador.

A no ser que el archivo esté en la DB?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 22
Ha aumentado su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

Problema al descargar PDF con PHP

Publicado por Felipe (12 intervenciones) el 30/09/2019 14:12:50
Claro, mis archivos los guardo en una base de datos. Alguna idea de que podria generar mi problema? Mucha gracias por comentar :D
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alejandro
Val: 1.634
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Problema al descargar PDF con PHP

Publicado por Alejandro (840 intervenciones) el 27/09/2019 20:17:49
  • Alejandro se encuentra ahora conectado en el
  • chat de PHP
He probado tu código como lo muestro abajo y funciona sin problemas, concuerdo con @Kathyu, tus archivos de origen deberían de ser el problema.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
function descargar($archivo){
    if(!empty($archivo)){
        $filename = basename($archivo);
        $filepath = $filename;
 
        if(!empty($filename) && file_exists($filepath)){
            //DEFINIR HEADERS
            header('Content-Description: File Transfer');
            header('Content-Type: application/octet-stream');
            header('Content-Disposition: attachment; filename="'.$filename.'"');
            header('Expires: 0');
            header('Cache-Control: must-revalidate');
            header('Pragma: public');
            header('Content-Lenght: '.filesize($filepath));
            header('Content-Transfer-Encoding: binary');
            readfile($filepath);
            exit;
        }else{
            echo "<h1>El archivo no existe.</h1>";
        }
    }
}
 
if( !isset($_GET['file']) ){
	echo '<a href="descarga.php?file=archivo.pdf">Descargar</a>';
}else{
	descargar($_GET['file']);
}
?>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 22
Ha aumentado su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

Problema al descargar PDF con PHP

Publicado por Felipe (12 intervenciones) el 30/09/2019 14:17:34
Exacto, al subir mis archivos a la BD estos se guardan dañados... acabo de probar guardando un archivo .docx y al descargarlo, me salta el error de archivo dañado. Alguna idea de como subir los archivos originales sin dañar su contenido? Gracias por comentar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kathyu
Val: 1.802
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Problema al descargar PDF con PHP

Publicado por Kathyu (905 intervenciones) el 30/09/2019 16:34:37
No subirlos a la DB.

Subalos a un directorio.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 22
Ha aumentado su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

Problema al descargar PDF con PHP

Publicado por Felipe (12 intervenciones) el 30/09/2019 19:05:21
Pero necesito guardarlos en la BD por que así se definió en mi trabajo. Cual es el problema de subirlos a la BD ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kathyu
Val: 1.802
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Problema al descargar PDF con PHP

Publicado por Kathyu (905 intervenciones) el 30/09/2019 20:13:32
Pues acá tiene un problema de subirlos a la DB

El problema así a groso modo, y espero no equivocarme (si no alguien que me corrija), es que sus archivos se pasan a binario y se deben volver a reconstruir cuando se van a recuperar de la misma, eso es mala practica, así como guardar imágenes en las bases.

Lo mejor es solo guardar las rutas y los nombres de los archivos, luego subirlos a directorios y consultarlos en base a rutas y nombres.

Para un mejor trabajo debería proponer guardarlos en directorios, si en su trabajo tienen una buena mente para ver entre que es lo mejor y lo que no, no tendrán reparos en cambiarlo.


También hay que decir que no es imposible subirlos a la DB, que sea mala practica es una cosa, pero imposible no es, y hay muchos que así lo hacen, así que en esencia algo esta haciendo mal su proceso para que los archivos no se suban o recuperen de manera satisfactoria.

Lamentablemente si usted dice que los debe subir, por mi parte no puedo ayudar, y estaré pendiente a ver en que termina todo esto. suerte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 22
Ha aumentado su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

Problema al descargar PDF con PHP

Publicado por Felipe (12 intervenciones) el 30/09/2019 21:39:24
En la BD solo guardo el nombre del archivo... no encuentro solución al tema del porque se dañan los archivos al descargarlos, ya que al subirlos los puedo visualizar sin problema

Gracias por tu tiempo Kathyu :d
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kathyu
Val: 1.802
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Problema al descargar PDF con PHP

Publicado por Kathyu (905 intervenciones) el 30/09/2019 22:10:53
Pero ha mencionado mas de 3 veces que guarda sus archivos en la DB, y ahorita dice que solo el nombre? al final no se sabe que es lo cierto, así tampoco se puede ayudar.

Es mas hasta dijo que en su trabajo se había definido guardarlos en la DB
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 22
Ha aumentado su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

Problema al descargar PDF con PHP

Publicado por Felipe (12 intervenciones) el 01/10/2019 17:01:15
Lo siento por la confusión. En mi DB estoy guardando solo el nombre de mis archivos y en mi sistema los subo a un directorio. Adjuntaré mi código para subir mis archivos.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
public function save(){
    Utils::isAdmin();
 
    if(isset($_POST)){
 
        //OBTENGO LOS DATOS DEL FORMULARIO
        $estado = isset($_POST['estado']) ? $_POST['estado'] : false;
        $idTipoDocumento = isset($_POST['idTipoDocumento']) ? $_POST['idTipoDocumento'] : false;
        $idSitio = isset($_POST['idSitio']) ? $_POST['idSitio'] : false;
        $idInmueble = isset($_POST['idInmueble']) ? $_POST['idInmueble'] : false;
 
        if(isset($_FILES['nombreArchivo'])){
            $file = $_FILES['nombreArchivo'];
            $filename = $file['name'];
            $mimetype = $file['type'];
 
            if(!is_dir('uploads/docs')){
                mkdir('uploads/docs', 0777, true);
            }
        }
 
        if($estado && $idTipoDocumento && $idSitio && $idInmueble && $filename && $mimetype == 'application/pdf' /*|| $mimetype == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'*/){
            $documento = new Documento();
            $documento->setEstado($_POST['estado']);
            $documento->setIdTipoDocumento($_POST['idTipoDocumento']);
            $documento->setIdSitio($_POST['idSitio']);
            $documento->setIdInmueble($_POST['idInmueble']);
            $documento->setNombreArchivo($filename);
            move_uploaded_file($file['tmp_name'], 'uploads/docs/'.$filename);
 
 
 
            if(isset($_GET['id'])){
                $id = $_GET['id'];
                $documento->setId($id);
                $save = $documento->edit();
            }else{
                $save = $documento->save();
            }
 
            if($save){
                $_SESSION['register'] = "complete";
            }else{
                $_SESSION['register'] = "failed";
            }
        }else{
            $_SESSION['register'] = "failed";
        }
    }else{
        $_SESSION['register'] = "failed";
    }
    header('Location:'.base_url.'documento/gestion');
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar