Foros del Web » Programando para Internet » PHP »

descargar documentos del servidor sin que se vea la ruta

Estas en el tema de descargar documentos del servidor sin que se vea la ruta en el foro de PHP en Foros del Web. Hola a tod@s! Tengo que realizar un script que permita descargar documentos (de diversos tipos: .txt, .doc, .xls, etc) que se encuentran en una ruta ...
  #1 (permalink)  
Antiguo 11/10/2006, 08:42
 
Fecha de Ingreso: mayo-2004
Ubicación: Valladolid (Spain)
Mensajes: 81
Antigüedad: 20 años, 6 meses
Puntos: 0
Exclamación descargar documentos del servidor sin que se vea la ruta

Hola a tod@s!
Tengo que realizar un script que permita descargar documentos (de diversos tipos: .txt, .doc, .xls, etc) que se encuentran en una ruta del servidor.
El problema surge después de listar dichos ficheros, ya que al abrirlos o descargarlos me aparece toda la ruta del fichero en la barra de título del navegador. Quiero que dicha ruta no sea conocida por el usuario (que no pueda verla), pero no lo consigo.
He intentado hacerlo con PHP, enviando a otro fichero (con GET y POST) .php la ruta del que quiero descargar y utilizando la función header("location:.....) y poniendo en la etiqueta <title> del <head> el texto que quiero que aparezca en la barra de título, pero me da un error y me dice que las cabeceras ya han sido enviadas (porque escribo código HTML antes de la llamada a la función header()).
También lo he intentado con JavaScript, con el método Window.Open(). Hay un atributo: titlebar, para mostrar ó no la barra de título, pero tampoco funciona. Independientemente de que le asigne yes o no la barra de título siempre sale, indicando exactamente toda la ruta donde está almacenado el fichero.

¿¿¿Alguien sabe cómo puedo hacerlo???

Gracias de antemano y saludos a tod@s
  #2 (permalink)  
Antiguo 11/10/2006, 09:47
Avatar de .php  
Fecha de Ingreso: julio-2006
Mensajes: 481
Antigüedad: 18 años, 4 meses
Puntos: 5
yo = tube el mismo problema
queria que descargen ficheros del servidor, pero que no sepan de donde se descargo y al copiar la url no le funcione
te comento como lo hice.

1º cree una carpeta que esta fuera del servidor DocumentRoot (tambien funciona desde dentro)

2º autentifico al usuario o un sesion_start();

3º un script en php muestro su contenido de dicha carpeta

4º otro script que realize descargas forzadas del servidor (todo encriptado con base_encode64())



busco mi script y te lo muestro como lo hice.
  #3 (permalink)  
Antiguo 11/10/2006, 10:06
 
Fecha de Ingreso: mayo-2004
Ubicación: Valladolid (Spain)
Mensajes: 81
Antigüedad: 20 años, 6 meses
Puntos: 0
Te agradecería mucho que me mostraras tu script. Entiendo casi todos los pasos, pero en el 4º me pierdo

Gracias .php
  #4 (permalink)  
Antiguo 11/10/2006, 10:08
Avatar de .php  
Fecha de Ingreso: julio-2006
Mensajes: 481
Antigüedad: 18 años, 4 meses
Puntos: 5
lo encontre lo habia posteado anteriormente
http://www.forosdelweb.com/showpost....0&postcount=11


si tienes alguna duda en el codigo solo postea
;)
  #5 (permalink)  
Antiguo 11/10/2006, 10:54
 
Fecha de Ingreso: mayo-2004
Ubicación: Valladolid (Spain)
Mensajes: 81
Antigüedad: 20 años, 6 meses
Puntos: 0
Hola .php,
casi funciona, pero me da el siguiente error
Fatal error: Call to a member function read() on a non-object in D:\pruebas\listar.php on line 25 en el archivo listar.php
La línea exacta a la que se refiere el error es la siguiente:
while ($archivo = $directorio->read()) {

No entiendo muy bien la línea y no sé cómo solucionar el error
  #6 (permalink)  
Antiguo 11/10/2006, 11:32
Avatar de .php  
Fecha de Ingreso: julio-2006
Mensajes: 481
Antigüedad: 18 años, 4 meses
Puntos: 5
verificastes que tu linea 24 tenga <?

si hicistes un copy paste funciona bien en un server linux
voy averiguar en el transcurso de hoy por que no te funciona, pero necesito que me des los datos de tu server PHP+APACHE abriasoft,xamp, apserver ,....
  #7 (permalink)  
Antiguo 11/10/2006, 13:04
 
Fecha de Ingreso: mayo-2004
Ubicación: Valladolid (Spain)
Mensajes: 81
Antigüedad: 20 años, 6 meses
Puntos: 0
Sí,he hecho directamente un copy, paste y efectivamente en la línea 24 tengo la apertura de php <?.
Estoy trabajando con un server linux, en concreto con WAMP5, uno de estos programas que trae APACHE+PHP+MYSQL integrado.
No sé si habrá que configurar alguna directiva del httpd.conf o del php.ini.
Voy a seguir mirando y probando cosas
Gracias
  #8 (permalink)  
Antiguo 11/10/2006, 13:19
 
Fecha de Ingreso: mayo-2004
Ubicación: Valladolid (Spain)
Mensajes: 81
Antigüedad: 20 años, 6 meses
Puntos: 0
El problema principal es que no entiendo perfectamente todo lo que haces en el script. En concreto, en la línea del error:
while ($archivo = $directorio->read()) {
la variable $directorio no sé lo que hace y no está declarada previamente.
Es posible que esto tenga algo que ver con el error??
  #9 (permalink)  
Antiguo 11/10/2006, 15:53
Avatar de .php  
Fecha de Ingreso: julio-2006
Mensajes: 481
Antigüedad: 18 años, 4 meses
Puntos: 5
tienes razon falto un pedazo de codigo

agrega esto arriba del la linea del error
Código PHP:
        $folder    =    $_SESSION["path"];
        
$directorio=dir($folder); 
sino me equivoco tengo una path que viene definida en el login, sino dejala estatica
  #10 (permalink)  
Antiguo 12/10/2006, 06:16
 
Fecha de Ingreso: mayo-2004
Ubicación: Valladolid (Spain)
Mensajes: 81
Antigüedad: 20 años, 6 meses
Puntos: 0
Perfecto .php,
con esas dos líneas funciona a la perfección.
Muchísimas gracias por tu inestimable ayuda. ))
  #11 (permalink)  
Antiguo 12/10/2006, 07:24
Avatar de .php  
Fecha de Ingreso: julio-2006
Mensajes: 481
Antigüedad: 18 años, 4 meses
Puntos: 5
hace falta un detalle
me di cuenta despues.

mira este codigo
Código PHP:
    if ($aTmp[0]=="descargas"){
        
$enlace $_SESSION["path"]."$aTmp[1]";
        
header ("Content-Disposition: attachment; filename=".$aTmp[1]."\n\n"); 
        
header ("Content-Type: application/octet-stream"); 
        
header ("Content-Length: ".filesize($enlace)); 
        
readfile($enlace); 
    } 
agregale un exit();
para que no se siga ejecutando, sino cuando baje un documento te adjuntara el html
de la pagina
Código PHP:
    if ($aTmp[0]=="descargas"){
        
$enlace $_SESSION["path"]."$aTmp[1]";
        
header ("Content-Disposition: attachment; filename=".$aTmp[1]."\n\n"); 
        
header ("Content-Type: application/octet-stream"); 
        
header ("Content-Length: ".filesize($enlace)); 
        
readfile($enlace); 
        exit;
    } 

PD: YA ESTABA AGREGADO PENSE QUE NO LO HABIA HECHO :D, ES UNA MODIFICACION QUE HICE HACE POCO
  #12 (permalink)  
Antiguo 12/10/2006, 15:02
 
Fecha de Ingreso: mayo-2004
Ubicación: Valladolid (Spain)
Mensajes: 81
Antigüedad: 20 años, 6 meses
Puntos: 0
Sí, efectivamente ya estaba agregado.
Muchas gracias .php
Saludos a tod@s
  #13 (permalink)  
Antiguo 17/10/2006, 20:17
Avatar de gustavodiazs  
Fecha de Ingreso: junio-2003
Ubicación: Tampico
Mensajes: 31
Antigüedad: 21 años, 5 meses
Puntos: 0
se puede usar:

Código PHP:
$enlace "otrodominio[dot]com/"."$aTmp[1]";
header ("Content-Disposition: attachment; filename=".$aTmp[1]."\n\n"); 
header ("Content-Type: application/octet-stream"); 
header ("Content-Length: ".filesize($enlace)); 
readfile($enlace); 
es decir tomar el archivo de otro servidor distinto.
__________________
Gustavo Diaz Salazar
Tampico Tamulipas Mexico
http://www.diazsalazar.com.mx
  #14 (permalink)  
Antiguo 18/10/2006, 01:23
 
Fecha de Ingreso: mayo-2004
Ubicación: Valladolid (Spain)
Mensajes: 81
Antigüedad: 20 años, 6 meses
Puntos: 0
Muchas gracias Gustavodiazs,
no sabía que se podía hacer, pero me parece realmente muy interesante.
Voy a probarlo ahora mismo.
Saludos a tod@s
  #15 (permalink)  
Antiguo 18/10/2006, 16:23
Avatar de gustavodiazs  
Fecha de Ingreso: junio-2003
Ubicación: Tampico
Mensajes: 31
Antigüedad: 21 años, 5 meses
Puntos: 0
Mas bien era pregunta mas que comentario... realmente no se si funcion y es lo que quiero sabes, puesto que ya lo intente y el archivo descargado me da 0 bites de tamaño.

Alguien lo ha intentado....
agradeceria cualquier conetario...
Saludos
__________________
Gustavo Diaz Salazar
Tampico Tamulipas Mexico
http://www.diazsalazar.com.mx
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 14:07.