Foros del Web » Programando para Internet » PHP »

Manejo de Permisos de descarga

Estas en el tema de Manejo de Permisos de descarga en el foro de PHP en Foros del Web. Estimados: Tengo que retocar un sistema en el que a ciertos usuarios se les permite o no descargar archivos que son subidos por el mismo ...
  #1 (permalink)  
Antiguo 30/07/2009, 15:30
Avatar de Juanmax  
Fecha de Ingreso: diciembre-2005
Ubicación: Paraná, Entre Ríos , Argentina
Mensajes: 90
Antigüedad: 18 años, 11 meses
Puntos: 0
Busqueda Manejo de Permisos de descarga

Estimados:
Tengo que retocar un sistema en el que a ciertos usuarios se les permite o no descargar archivos que son subidos por el mismo sistema. La pregunta es la siguiente:

¿Cómo puedo manejar que no se pueda descargar el archivo conociendo el link al mismo y obligar a iniciar sesión?

Si bien en la base de datos existe un campo que habilita la descarga, algún usuario un poco mas 'avispado' podría acceder al archivo conociendo el link de un usuario con permisos. Ahí esta el punto de mi pregunta.

Desde ya agradecido al foro y a toda la comunidad por la solidaridad de siempre... saludos !!!
__________________
juanmax - GUERRERO Lab
  #2 (permalink)  
Antiguo 30/07/2009, 15:33
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 6 meses
Puntos: 1517
Respuesta: Manejo de Permisos de descarga

Si el no esta logueado y quiere descargar el archivo sin loguearse puedes usar las sesiones para verificar si esta logueado o no.
  #3 (permalink)  
Antiguo 30/07/2009, 15:33
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Manejo de Permisos de descarga

Pon los archivos fuera del Document Root y usa PHP para forzar la descarga del archivo (busca en el foro), luego antes de forzar la descarga haces una comprobación para ver si esta o no autorizado para descargar el archivo.

Saludos.
  #4 (permalink)  
Antiguo 04/08/2009, 15:37
Avatar de Juanmax  
Fecha de Ingreso: diciembre-2005
Ubicación: Paraná, Entre Ríos , Argentina
Mensajes: 90
Antigüedad: 18 años, 11 meses
Puntos: 0
Respuesta: Manejo de Permisos de descarga

Encontré este código que pueda ser útil. No entiendo mucho cual es la diferencia de descargarlo así.

<?php
$enlace = $path_a_tu_doc."/".$id;
header ("Content-Disposition: attachment; filename=".$id."nn");
header ("Content-Type: application/octet-stream");
header ("Content-Length: ".filesize($enlace));
readfile($enlace);
?>
__________________
juanmax - GUERRERO Lab
  #5 (permalink)  
Antiguo 04/08/2009, 21:27
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Manejo de Permisos de descarga

Pues la ventaja es que antes de descargarlo puedes comprobar si esta autorizado o no a descargar el archivo, y en caso que no lo este, niegas la descarga.

Saludos.
  #6 (permalink)  
Antiguo 10/08/2009, 08:49
Avatar de Juanmax  
Fecha de Ingreso: diciembre-2005
Ubicación: Paraná, Entre Ríos , Argentina
Mensajes: 90
Antigüedad: 18 años, 11 meses
Puntos: 0
Respuesta: Manejo de Permisos de descarga

Tengo que leer de una DB el path del archivo a descargar. Intente probar algun ejemplo para forzar la descarga pero resulta que se descarga a sí mismo el php.
Este es el código:

Código PHP:
            //conexión
            
$link mysql_connect('localhost''**''**');
            if (!
$link) {
            
//query
            
$sentencia "SELECT path_lp, filename_lp FROM `lp_path` ORDER BY id_lp DESC LIMIT 1";
            
mysql_select_db("**");
            
$result mysql_query($sentencia,$link);
            
$oRuta=mysql_fetch_array($result);
            
//desconexión
            
mysql_close($link);
            }


$id $oRuta["filename_lp"];
$enlace $oRuta["path_lp"];
header ("Content-Disposition: attachment; filename=".$oRuta["filename_lp"]);
header ("Content-Type: application/octet-stream");
header ("Content-Length: ".filesize($enlace));
readfile($enlace); 
Este archivo se ejecuta desde otra página con un: href="download.php"

Qué estoy haciendo mal???????

GRACIAS POR TODO
__________________
juanmax - GUERRERO Lab
  #7 (permalink)  
Antiguo 10/08/2009, 08:55
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 6 meses
Puntos: 1517
Respuesta: Manejo de Permisos de descarga

Escribe
Código php:
Ver original
  1. var_dump($oRuta["filename_lp"]);
  2. var_dump($oRuta["path_lp"]);
  3. die();
  4. $id = $oRuta["filename_lp"];
  5. $enlace = $oRuta["path_lp"];
  6. header ("Content-Disposition: attachment; filename=".$oRuta["filename_lp"]);
  7. header ("Content-Type: application/octet-stream");
  8. header ("Content-Length: ".filesize($enlace));
  9. readfile($enlace);

a ver si trae datos
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #8 (permalink)  
Antiguo 10/08/2009, 12:18
Avatar de Juanmax  
Fecha de Ingreso: diciembre-2005
Ubicación: Paraná, Entre Ríos , Argentina
Mensajes: 90
Antigüedad: 18 años, 11 meses
Puntos: 0
Respuesta: Manejo de Permisos de descarga

me muestra en pantalla

NULL NULL
__________________
juanmax - GUERRERO Lab
  #9 (permalink)  
Antiguo 10/08/2009, 12:20
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 6 meses
Puntos: 1517
Respuesta: Manejo de Permisos de descarga

Ahi tienes el problema, no te esta trayendo nada $oRuta["path_lp"] ni $oRuta["filename_lp"].
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #10 (permalink)  
Antiguo 10/08/2009, 12:31
Avatar de Juanmax  
Fecha de Ingreso: diciembre-2005
Ubicación: Paraná, Entre Ríos , Argentina
Mensajes: 90
Antigüedad: 18 años, 11 meses
Puntos: 0
Respuesta: Manejo de Permisos de descarga

Si, tenia problemas la conexión mysql. Dejo el código para quien quiera hacer una descarga forzada con consulta mysql:

Código PHP:
link mysql_connect('***''***''***');
if (!
$link) {
    die(
'Falló la conexión a la base de datos: ' mysql_error());
}
//query
$sentencia "SELECT path_lp, filename_lp FROM `lp_path` ORDER BY id_lp DESC LIMIT 1";
mysql_select_db("***");
$result mysql_query($sentencia,$link);
$oRuta=mysql_fetch_array($result);
//desconexión
mysql_close($link);
            

$id $oRuta["filename_lp"];
$enlace $oRuta["path_lp"];
header ("Content-Disposition: attachment; filename=".$oRuta["filename_lp"]);
header ("Content-Type: application/octet-stream");
header ("Content-Length: ".filesize($enlace));
readfile($enlace); 
Gracias por todo amigo.
__________________
juanmax - GUERRERO Lab
  #11 (permalink)  
Antiguo 10/08/2009, 16:11
Avatar de Juanmax  
Fecha de Ingreso: diciembre-2005
Ubicación: Paraná, Entre Ríos , Argentina
Mensajes: 90
Antigüedad: 18 años, 11 meses
Puntos: 0
Respuesta: Manejo de Permisos de descarga

Cuando se descargan los archivos en algunas máquinas dan error al abrirlos, o no reconoce el formato. Que podrá ser?
__________________
juanmax - GUERRERO Lab
  #12 (permalink)  
Antiguo 10/08/2009, 21:30
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Manejo de Permisos de descarga

Revisa que no estes enviando nada de salida antes de forzar la descarga.

Saludos.
  #13 (permalink)  
Antiguo 11/08/2009, 07:49
Avatar de Juanmax  
Fecha de Ingreso: diciembre-2005
Ubicación: Paraná, Entre Ríos , Argentina
Mensajes: 90
Antigüedad: 18 años, 11 meses
Puntos: 0
Respuesta: Manejo de Permisos de descarga

header ("Content-Length: ".filesize($enlace));

Ahora descarga perfecto.
__________________
juanmax - GUERRERO Lab
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:45.