Foros del Web » Programando para Internet » PHP »

Descargas de Ficheros sin que el usuario conozca la ruta real del fichero

Estas en el tema de Descargas de Ficheros sin que el usuario conozca la ruta real del fichero en el foro de PHP en Foros del Web. En el canal #php del irc-hispano.org algunos usuarios demandan saber como se hace la descarga de ficheros sin que el usuario conozca la ruta original ...
  #1 (permalink)  
Antiguo 12/07/2003, 07:07
 
Fecha de Ingreso: marzo-2003
Mensajes: 5
Antigüedad: 14 años, 8 meses
Puntos: 0
Mensaje Descargas de Ficheros sin que el usuario conozca la ruta real del fichero

En el canal #php del irc-hispano.org algunos usuarios demandan saber como se hace la descarga de ficheros sin que el usuario conozca la ruta original del fichero.

Empecemos con el asunto. Basicamente las funciones que debemos usar para la descarga de archivos son:
Código PHP:
function descarga_fichero ($nombreFichero) {
    
// ob_clean ();
    
header("Content-Type: application/octet-stream");
    
header("Content-Length: " filesize($nombreFichero));
    
header("Content-Disposition: attachment; filename=\"$nombreFichero\"");
    
$fichero fopen($nombreFichero'rb');
    
fpassthru($fichero);
    
header ("Connection: close");
    die ();

Sin duda alguna esto se puede mejorar bastante. Puesto que con este sistema conseguimos que no hayan descargas 'sin que nosotros lo sepamos'. El siguiente paso seria tener en una base de datos reflejado algunos datos de interes como un contador de descarga, una categoria de la descarga, etc. Pero eso queda para nota y tendreis que investigar por vuestra cuenta.

Recordar por ultimo, que el scrip donde este reflejado esto no deberia enviar ninguna salida antes de la llamada a esta funcion...
  #2 (permalink)  
Antiguo 12/07/2003, 07:21
 
Fecha de Ingreso: marzo-2003
Mensajes: 5
Antigüedad: 14 años, 8 meses
Puntos: 0
Información Articulo complementario

Olvide indicarlo, pero este articulo se puede complementar con otro que realice hace tiempo para la subida de ficheros al servidor.

La url del mismo es Un pequeño Script para subir ficheros
  #3 (permalink)  
Antiguo 12/07/2003, 14:08
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

Solo un detalle. Creo que el valor de filename del Content-disposition debe ser solo el nombre del fichero, no la ruta completa, que es lo que necesitan tanto filesize() como fopen(). Se podria usar l afuncion basename() (www.php.net/basename) para extraer el nombre del fichero del parametro $nombreFichero.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #4 (permalink)  
Antiguo 12/07/2003, 14:50
 
Fecha de Ingreso: marzo-2003
Mensajes: 5
Antigüedad: 14 años, 8 meses
Puntos: 0
Muy cierto

Es verdad, olvide hacer eso.

Código PHP:
header("Content-Disposition: attachment; filename=\"" basename($nombreFichero) . "\""); 
  #5 (permalink)  
Antiguo 12/07/2003, 21:13
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Y otro detalle .. sería la "compatibilidad" con navegadores .. pues hay ciertos navegadores que "no entienden" las mismas cabeceras para indicar que "lo que vá" es para que lo descargue ..

Si te animas hacer algún "test" entre navegadores (y sus correspondientes versiones) estaría bueno para ir "refinando" el script. Justamente phpMyAdmin hace eso mismo .. (si ven su código lo veran) .. mira que cliente (navegador) está conectado al escript (y versión) y en consecuencia le "tira" las cabeceras HTTP más adecuadas para este.

Por lo demas, comentar a nivel de uso de este típo de escripts que ... la seguridad de "no saber la ruta" (este scritp) unido a que "subamos" nuestros archivos fuera del "DOCUMENT_ROOT" de nuestro servidor HTTP (sitio) sería lo ideal (o bien proteger el archivo con un .htaccess a sólo la IP/dominio nuestro para que sólo quede accesible desde este scritp PHP que va hacer la descarga).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 05:05.