Foros del Web » Programando para Internet » PHP »

Descargar o abrir ficheros de varios tipos.(SOLUCIONADO)

Estas en el tema de Descargar o abrir ficheros de varios tipos.(SOLUCIONADO) en el foro de PHP en Foros del Web. Hola, en mi base de datos tengo almacenadas las rutas de varios archivos (PDFs, archivos de word,powerpoint, texto, etc) que se han subido al servidor. ...
  #1 (permalink)  
Antiguo 20/07/2004, 13:12
 
Fecha de Ingreso: noviembre-2003
Mensajes: 34
Antigüedad: 14 años
Puntos: 0
Descargar o abrir ficheros de varios tipos.(SOLUCIONADO)

Hola, en mi base de datos tengo almacenadas las rutas de varios archivos (PDFs, archivos de word,powerpoint, texto, etc) que se han subido al servidor. En un determinado momento, recupero esas rutas y quiero dar la opción al usuario de descarar o abrir el archivo y lo he intentado mediante un enlace con la ruta obtenida de la base dedatos, pero no funciona, la ruta es correcta, pero al pinchar ne el enlace no pasa nada. Adjunto la línea donde pogo el enlace a ver si me podeis indicar qué hago mal.

echo '<p><a href="'.$fila_ref['refr_uri_sist'].'">Ver Referencia</a>.</p>';

Previamente he hecho un echo de $fila_ref['refr_uri_sist'] para cerciorarme de que la ruta es correcta y lo es, es del estilo "c:\dir_temp\ficheros\fichero1.txt"

Gracias de antemano.

Hasta luego.

Última edición por kikujiro; 21/07/2004 a las 10:23 Razón: Solucionado.
  #2 (permalink)  
Antiguo 20/07/2004, 14:48
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Si esa ruta de archivo está fuera de tu "Document Root" de tu servidor HTTP .. no vas a poder descargar el archivo así directamente.

Lo que podrías hacer es un "lanzador" de archivos para que sea PHP el que lea el archivo desde su ruta (si es que tiene permisos y no hay limitaciones tipo "open_base_dir" o "safe_mode" aplicandose) y lo entregue el buffer de salida.

Algo tipo:

bajar.php
Código PHP:
<?

// OPCIONAL!
// Tu consulta a tu BD para obtener la ruta del archivo dado por referencia.
$sql="SELECT refr_uri_sist FROM nose WHERE id_nose='".$_GET['id_archivo']."'";
$resultado=mysql_query($sql);
$refr_uri_sist=mysql_result($resultado,0);

// o bien pasas por el URL el $refr_uri_sist .. (peligróso si no filtras bien esa variable y limitas que tipo de archivos y de que rutas se pueden bajar .. Recomendable el método anterior.

// cabecera HTTP que le va a indicar al navegador que tipo de archivo es
// (faltarían algunas más para afinar el tema ..).

// Cabecera HTTp que indica el formato MIME del archivo . en tu caso parece que todos son PDF . .
header("Content-type: application/pdf");
// basename() obtiene el nombre del archivo de una ruta+nombre dado completo.
// Ese será el nombre que se ofrecerá a descargar.
header("Content-disposition: inline; filename=".basename($refr_uri_sist));
// Se envia el tamaño del archivo a descargar (para que tu cliente de descarga sepa cuanto le queda y pueda hacer sus estadísticas de bajada del archivo)
header("Content-length: " filesize($refr_uri_sist));

// leer el archivo desde su ruta absoluta y entregarlo al buffer de salida de PHP
readfile($refr_uri_sist);
?>
Y su uso:
<img src="bajar.php?id_archivo=referencia" >

Con esta misma filosofía podrías validar quien baja el archivo, estadísticas de quien/cuanto se baja (es solicitado) .. etc

Un saludo,

Última edición por Cluster; 20/07/2004 a las 14:51
  #3 (permalink)  
Antiguo 21/07/2004, 10:02
 
Fecha de Ingreso: noviembre-2003
Mensajes: 34
Antigüedad: 14 años
Puntos: 0
No me funciona bien.

Hola, lo primero muchas gracias por tu pronta respuesta, ahora que debo de ser algo torpe porque no me funciona bien. Tengo 2 fallos:

1.- Si tengo instalado Acrobat reader (6.0) arranca pero se me queda tostado y no muestra nada.

2.- Si no lo tengo instalado, me ofrece la opción de descargar el archivo, pero se descarga el archivo donde tengo el lanzador.

A continuación te pongo el código del archivo donde está el lanzador:

bajar_referencia.php

$consulta= "select refr_uri_sist
from referencias
where refr_id_ref = ".$id_referencia;
$con = mysql_connect('mi_gestor','mi_usuario','mi_complej a_palabra_clave');
mysql_select_db('tfc');
$res = mysql_query($consulta,$con);

$uri_sis = mysql_result($res,0);

// Cabecera HTTp que indica el formato MIME del archivo . en tu caso parece que todos son PDF . .
header("Content-type: application/pdf");
// basename() obtiene el nombre del archivo de una ruta+nombre dado completo.
// Ese será el nombre que se ofrecerá a descargar.
header("Content-disposition: inline; filename=".basename($uri_sist));
// Se envia el tamaño del archivo a descargar (para que tu cliente de descarga sepa cuanto le queda y pueda hacer sus estadísticas de bajada del archivo)
header("Content-length: " . filesize($uri_sist));
// leer el archivo desde su ruta absoluta y entregarlo al buffer de salida de PHP
readfile($uri_sist);
?>

y la manera de llamarlo desde código php:

echo '<p><a href="bajar_referencia.php?id_referencia='.$id_ref .'">Ver Referencia</a>.</p>';

$id_ref tiene un valor correcto.

No consigo encontrar el fallo. A ve rsi alguien puede ayudarme.
Muchas gracias.
Hasta luego.
  #4 (permalink)  
Antiguo 21/07/2004, 10:22
 
Fecha de Ingreso: noviembre-2003
Mensajes: 34
Antigüedad: 14 años
Puntos: 0
Solucionado.

Hola, ya está solucionado el problema, soy mu torpe y me he dejado una variable mal nombrada.
Perdón.
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 10:14.