Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Problema para visualizar pdf.

Estas en el tema de Problema para visualizar pdf. en el foro de PHP en Foros del Web. Buenas. Estoy trabajando en local con Xampp. Tengo unos pdfs en una carpeta, en la base de datos tengo la ruta hasta ellos. He hecho ...
  #1 (permalink)  
Antiguo 14/07/2014, 03:39
 
Fecha de Ingreso: octubre-2005
Mensajes: 31
Antigüedad: 18 años, 6 meses
Puntos: 2
Problema para visualizar pdf.

Buenas.
Estoy trabajando en local con Xampp.
Tengo unos pdfs en una carpeta, en la base de datos tengo la ruta hasta ellos.
He hecho un pequeño formulario donde eliges el pdf en un Select, escribes una contraseña, lo envias y en ese momento debería visualizarse el pdf elegido en otra página.
Me conecto a la base de datos, hago el SELECT y recibo el campo que quiero.
Pero a la hora de mostrarlo me sale el símbolo de cargando y se queda como en un bucle, no aparece el pdf.
Resulta que si lo embebo en la página sí que aparece correctamente, pero para que salga como normalmente se ven los pdfs no lo consigo.
Dejo el código:

Código PHP:
<?php
    
include 'db/conex.php';

    if (isset (
$_POST['ok'])){
        
$item$_POST['item'];
        
$password=$_POST['password'];
         
        
$conex=conex();
        
$query='SELECT ruta FROM descargas WHERE id='.$item.' AND password='.$password;
        
$result=mysql_query($query,$conex) or die (mysql_error($conex));
        
$rowmysql_fetch_array($result);
        
extract($row);
        
        
$file 'downloads/'.$ruta;
        
$filename $ruta/* Note: Always use .pdf at the end. */ 
        
header('Content-type: application/pdf');
        
header('Content-Disposition: inline; filename="' $filename '"');
        
header('Content-Transfer-Encoding: binary');
        
header('Content-Length: ' filesize($file));
        
header('Accept-Ranges: bytes');
        
readfile($file);
        }
?>
La variable $ruta coincide con el nombre del pdf, si hago un echo $file; veo la ruta correcta: downloads/nombre.pdf.
A ver si me podéis ayudar.
Gracias de antemano y un saludo.
  #2 (permalink)  
Antiguo 14/07/2014, 04:06
Avatar de bookmaster  
Fecha de Ingreso: febrero-2002
Ubicación: Toledo
Mensajes: 976
Antigüedad: 22 años, 2 meses
Puntos: 67
Respuesta: Problema para visualizar pdf.

Cambia esta línea:
Código:
$filename = $ruta;
Por:
Código:
$filename = $file;
El problema es que en uno le estas metiendo solo el nombre del archivo y en el otro la ruta y el nombre.
De todas maneras para no tener que hacer eso cambia todos los $filename por $file, y así te ahorrarías esa línea.
Se quedaría así:
Código PHP:
 $file 'downloads/'.$ruta;       
        
header('Content-type: application/pdf');
        
header('Content-Disposition: inline; filename="' $file '"');
        
header('Content-Transfer-Encoding: binary');
        
header('Content-Length: ' filesize($file));
        
header('Accept-Ranges: bytes');
        
readfile($file);
        } 
__________________
Decir si te a funcionado la respuesta es ¡GRATIS!. Por favor indicarlo.
http://www.lohacemosweb.net
http://tutoriales.lohacemosweb.net
  #3 (permalink)  
Antiguo 14/07/2014, 04:20
 
Fecha de Ingreso: octubre-2005
Mensajes: 31
Antigüedad: 18 años, 6 meses
Puntos: 2
Respuesta: Problema para visualizar pdf.

Cita:
Iniciado por bookmaster Ver Mensaje
Cambia esta línea:
Código:
$filename = $ruta;
Por:
Código:
$filename = $file;
El problema es que en uno le estas metiendo solo el nombre del archivo y en el otro la ruta y el nombre.
De todas maneras para no tener que hacer eso cambia todos los $filename por $file, y así te ahorrarías esa línea.
Se quedaría así:
Código PHP:
 $file 'downloads/'.$ruta;       
        
header('Content-type: application/pdf');
        
header('Content-Disposition: inline; filename="' $file '"');
        
header('Content-Transfer-Encoding: binary');
        
header('Content-Length: ' filesize($file));
        
header('Accept-Ranges: bytes');
        
readfile($file);
        } 
Hola, pues no lo consigo con este código. Sigue cargando indefinidamente.
Un saludo.
  #4 (permalink)  
Antiguo 14/07/2014, 04:26
Avatar de bookmaster  
Fecha de Ingreso: febrero-2002
Ubicación: Toledo
Mensajes: 976
Antigüedad: 22 años, 2 meses
Puntos: 67
Respuesta: Problema para visualizar pdf.

Yo he echo la prueba y a mi si que me carga el archivo que le e puesto, ejemplo funcionando:

Asegúrate que el archivo que estés intentando mostrar este bien formado, o que los datos que recibes desde la base de datos lleguen correctamente, ya que en el ejemplo mio le e metido el nombre del archivo a mano.

Nota: Ahora que me fijo a $ruta no le asignas valor en ningún momento, por lo que realmente no intenta cargarte ningún archivo.
__________________
Decir si te a funcionado la respuesta es ¡GRATIS!. Por favor indicarlo.
http://www.lohacemosweb.net
http://tutoriales.lohacemosweb.net

Última edición por bookmaster; 14/07/2014 a las 04:31
  #5 (permalink)  
Antiguo 14/07/2014, 04:35
 
Fecha de Ingreso: octubre-2005
Mensajes: 31
Antigüedad: 18 años, 6 meses
Puntos: 2
Respuesta: Problema para visualizar pdf.

Hola de nuevo, he puesto unos echos para ver las variables:
Código PHP:
echo 'esto es $ruta: '.$ruta.'<br />';   
        
$file 'downloads/'.$ruta;  
        echo 
'esto es $file: '.$file.'<br />'
        echo 
'esto es $filename: "' $file '"<br />'
y me devuelve esto:
Código:
esto es $ruta: Motorsolar.pdf
esto es $file: downloads/Motorsolar.pdf
esto es $filename: "downloads/Motorsolar.pdf"
Todo parece correcto, pero no acaba de cargar. Puede ser un problema de estar en local?
Gracias por tus rápidas respuestas.

pd. con la linea de código extract($row) los nombres de los campos me los convierte en variables y en $ruta me devuelve el valor que espero.
  #6 (permalink)  
Antiguo 14/07/2014, 04:49
Avatar de bookmaster  
Fecha de Ingreso: febrero-2002
Ubicación: Toledo
Mensajes: 976
Antigüedad: 22 años, 2 meses
Puntos: 67
Respuesta: Problema para visualizar pdf.

MMM la verdad es que nunca había usado extract(), pero es bueno saber lo que hace jeje.

Sobre el problema, asegúrate que las rutas al archivo sean correctas en relación a donde se llame el script.
Prueba a hacer un file_exists para comprobar que el archivo esta donde le dices que está.
Código PHP:
echo (file_exists($file))?'Existe':'No existe'
__________________
Decir si te a funcionado la respuesta es ¡GRATIS!. Por favor indicarlo.
http://www.lohacemosweb.net
http://tutoriales.lohacemosweb.net
  #7 (permalink)  
Antiguo 14/07/2014, 09:50
Avatar de arcanisgk122  
Fecha de Ingreso: junio-2010
Mensajes: 755
Antigüedad: 13 años, 11 meses
Puntos: 28
Respuesta: Problema para visualizar pdf.

Cita:
$file = '/downloads/'.$ruta;
__________________
Cooler Master Gladiator 600 - AMD PHENOM II X4 955 @ 3.5GHZ
GA-MA78GM-US2H - Super Talent 800 2GB x 2 Dual, (Unganged)
PSU Cooler Master eXtreme Power Plus 500W - Saphire R7-260OC-2GB
  #8 (permalink)  
Antiguo 14/07/2014, 10:32
 
Fecha de Ingreso: octubre-2005
Mensajes: 31
Antigüedad: 18 años, 6 meses
Puntos: 2
Respuesta: Problema para visualizar pdf.

Hola Bookmaster, he probado tu línea de código y me sale que $file existe. Pero no hay manera, sin embargo lo he hecho poniendo el nombre manualmente y sí que aparece correctamente.
La línea de arcanisgk122, tampoco me funciona.
  #9 (permalink)  
Antiguo 14/07/2014, 11:21
Avatar de bookmaster  
Fecha de Ingreso: febrero-2002
Ubicación: Toledo
Mensajes: 976
Antigüedad: 22 años, 2 meses
Puntos: 67
Respuesta: Problema para visualizar pdf.

Pues ya si que es raro, porque yo lo e probado en diferentes servers (IIS, Apache, USBWebserver, y en el XAMP) y si que funciona bien, al menos con mis pdf.

¿As probado en diferentes navegadores a ver si es cosa de que el navegador te lo este bloqueando?

Otra preguntilla ¿estas haciendo que se vea en una página nueva en blanco o estas tratando de que se vea dentro de otra con más código, por que si es esta última opción puede ser normal ya que los headers se pisarían con el resto.
__________________
Decir si te a funcionado la respuesta es ¡GRATIS!. Por favor indicarlo.
http://www.lohacemosweb.net
http://tutoriales.lohacemosweb.net
  #10 (permalink)  
Antiguo 14/07/2014, 11:28
 
Fecha de Ingreso: octubre-2005
Mensajes: 31
Antigüedad: 18 años, 6 meses
Puntos: 2
Respuesta: Problema para visualizar pdf.

Cita:
Iniciado por bookmaster Ver Mensaje
Pues ya si que es raro, porque yo lo e probado en diferentes servers (IIS, Apache, USBWebserver, y en el XAMP) y si que funciona bien, al menos con mis pdf.

¿As probado en diferentes navegadores a ver si es cosa de que el navegador te lo este bloqueando?

Otra preguntilla ¿estas haciendo que se vea en una página nueva en blanco o estas tratando de que se vea dentro de otra con más código, por que si es esta última opción puede ser normal ya que los headers se pisarían con el resto.
Justo, has dado en el clavo. Acabo de probarlo en el explorer y funciona perfectamente.
A qué se puede deber que en el chrome no funcione?

Muchas gracias.
  #11 (permalink)  
Antiguo 14/07/2014, 11:30
Avatar de bookmaster  
Fecha de Ingreso: febrero-2002
Ubicación: Toledo
Mensajes: 976
Antigüedad: 22 años, 2 meses
Puntos: 67
Respuesta: Problema para visualizar pdf.

Mira a ver si tienes bien puesto el complemento del adobe reader. En los diferentes navegadores que e probado si que me funciona también.

Te paso un enlace para el Chrome: Complemento Adobe PDF
__________________
Decir si te a funcionado la respuesta es ¡GRATIS!. Por favor indicarlo.
http://www.lohacemosweb.net
http://tutoriales.lohacemosweb.net
  #12 (permalink)  
Antiguo 14/07/2014, 11:52
 
Fecha de Ingreso: octubre-2005
Mensajes: 31
Antigüedad: 18 años, 6 meses
Puntos: 2
Respuesta: Problema para visualizar pdf.

Esto no lo entiendo bien. Yo tengo instalado el Pdf-xchange viewer. Pero de todas formas en chrome sí que veo pdfs, los que no veo son estos en los que estoy trabajando.
Ahora te mando un privado.
  #13 (permalink)  
Antiguo 14/07/2014, 11:53
 
Fecha de Ingreso: octubre-2005
Mensajes: 31
Antigüedad: 18 años, 6 meses
Puntos: 2
Respuesta: Problema para visualizar pdf.

Esto no lo entiendo bien. Yo tengo instalado el Pdf-xchange viewer. Pero de todas formas en chrome sí que veo pdfs, los que no veo son estos en los que estoy trabajando.
Ahora te mando un privado.
  #14 (permalink)  
Antiguo 14/07/2014, 12:27
Avatar de bookmaster  
Fecha de Ingreso: febrero-2002
Ubicación: Toledo
Mensajes: 976
Antigüedad: 22 años, 2 meses
Puntos: 67
Respuesta: Problema para visualizar pdf.

Por las pruebas que he realizado el código en sí esta bien, el problema le tienes en el navegador. Te he mandado un privado para responderte con los resultados de las pruebas.

Dejo el resumen por si alguien mas tiene problemas para ver los PDFs.
Instalando el Acrobar Reader se ven sin problemas.

Tras varias pruebas realizadas para solucionarlo al final e descubierto que había un pequeño problema entre la base de datos y los headers, te dejo el código que debería de funcionarte.
Código PHP:
        $file 'downloads/'.$ruta;  
        
ob_clean();
        
flush();
        
header('Content-type: application/pdf');
        
header('Content-Disposition: inline; filename="' $file '"');
        
readfile($file);
        exit; 
__________________
Decir si te a funcionado la respuesta es ¡GRATIS!. Por favor indicarlo.
http://www.lohacemosweb.net
http://tutoriales.lohacemosweb.net

Última edición por bookmaster; 15/07/2014 a las 03:06 Razón: Agregado codigo
  #15 (permalink)  
Antiguo 15/07/2014, 03:20
 
Fecha de Ingreso: octubre-2005
Mensajes: 31
Antigüedad: 18 años, 6 meses
Puntos: 2
Respuesta: Problema para visualizar pdf.

Muchas gracias Bookmaster, ya me funciona. Pero no con este código, si uso este código me salen unos warning (Cannot modify header information - headers already sent in) y el pdf codificado.
Sin embargo si dejo el código así, si que me funciona:
Código PHP:
$file 'downloads/'.$ruta;  
        
header('Content-type: application/pdf');
        
header('Content-Disposition: inline; filename="' $file '"');
        
readfile($file);
        exit; 
Parece que el problema estaba en estas líneas:
Código PHP:
header('Content-Transfer-Encoding: binary');
        
header('Content-Length: ' filesize($file));
        
header('Accept-Ranges: bytes'); 
Menos mal que se ha hecho la luz.
Gracias nuevamente Bookmaster por el tiempo que le has dedicado.
Un saludo.
  #16 (permalink)  
Antiguo 15/07/2014, 03:26
Avatar de bookmaster  
Fecha de Ingreso: febrero-2002
Ubicación: Toledo
Mensajes: 976
Antigüedad: 22 años, 2 meses
Puntos: 67
Respuesta: Problema para visualizar pdf.

Hay un pequeño fallo en mi código, ya que se envían los headers y hay que limpiarlos primero por lo que debería de ser:
Código PHP:
        header_remove();
        
header('Content-type: application/pdf');
        
header('Content-Disposition: inline; filename="' $file '"');
        
readfile($file);
        exit; 
__________________
Decir si te a funcionado la respuesta es ¡GRATIS!. Por favor indicarlo.
http://www.lohacemosweb.net
http://tutoriales.lohacemosweb.net
  #17 (permalink)  
Antiguo 15/07/2014, 03:30
 
Fecha de Ingreso: octubre-2005
Mensajes: 31
Antigüedad: 18 años, 6 meses
Puntos: 2
Respuesta: Problema para visualizar pdf.

Cita:
Iniciado por bookmaster Ver Mensaje
Hay un pequeño fallo en mi código, ya que se envían los headers y hay que limpiarlos primero por lo que debería de ser:
Código PHP:
        header_remove();
        
header('Content-type: application/pdf');
        
header('Content-Disposition: inline; filename="' $file '"');
        
readfile($file);
        exit; 
Ahora sí que funciona.
Un saludo.

Etiquetas: formulario, mysql, select, sql, variable
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:42.