it-swarm-es.com

Descargar un archivo fuera del directorio web

Tengo un escenario en el que ciertos archivos se almacenan fuera del directorio raíz del documento, como este ...

/home/user/public_html/{drupal files are in here}
/home/user/data/{special data files are in here}

Me gustaría permitir que los usuarios con permisos especiales descarguen archivos de/home/user/data utilizando el contenedor de archivos integrado de Drupal, pero no estoy seguro de cómo vincular los archivos.

Addendum: La mayoría de mis archivos se almacenan en la ubicación habitual:

/home/user/public_html/sites/default/files

Son solo algunos de ellos los que necesito almacenar en la carpeta de datos externos. Por razones de seguridad, no quiero cambiar el directorio sites/default/files/a/home/user/data.

2
Codeblind

Drupal 6 no admite tener habilitados los archivos públicos y privados, pero hay algunos módulos que lo proporcionan, por ejemplo http://drupal.org/project/private_download .

Si esos módulos no hacen lo que necesita, también puede escribir el suyo propio, consulte file_download () para inspirarse. Esta es la devolución de llamada de la página que sirve archivos privados a través de PHP verificando el acceso con hook_file_download ().

3
Berdir

No soy bueno en * nix, pero creo que debería crear un enlace simbólico a este directorio desde public_html/y cmod -R 777 a una carpeta externa.

1
dobeerman

Hago esto todo el tiempo por razones de seguridad.

1) Deberá configurar su open_basedir para incluir el directorio o directorios donde almacena sus archivos fuera del docroot del servidor web.

2) Necesitará una lógica separada para asegurar que la persona pueda obtener los archivos, como colocar el enlace/botón de descarga en una página a la que solo estos usuarios tienen acceso.

3) Cuando la persona autorizada accede a su enlace de descarga especial, está activando una lógica suya que usa algo como file_get_contents () en el archivo deseado fuera de docroot, lo cual es posible porque configuró open_basedir para conocer el directorio del archivo deseado

4) Ahora que tiene el archivo deseado en una variable, simplemente páselo a esta rutina y el navegador del usuario mostrará un cuadro de diálogo "guardar archivo": el archivo se envía, en lugar de extraer, al usuario. TaDa!

/***************************************************************************************************
* Prompt the user to download the passed string as a file.
*/
function _Push_download( $output, $filename ) 
{
  header("Pragma: public");
  header("Expires: 0");
  header("Cache-Control: private");
  header("Content-type: application/octet-stream");
  header("Content-Disposition: attachment; filename=$filename");
  header("Accept-Ranges: bytes");
  echo $output;
  exit;
}
1
Blake Senftner