Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] ¿Como acceder a archivos que están fuera del directorio de publicación?

Estas en el tema de ¿Como acceder a archivos que están fuera del directorio de publicación? en el foro de PHP en Foros del Web. Hola, estoy intentando implementar una descarga de archivos en una página, pero por motivos de seguridad y confidencialidad necesito que los archivos estén alojados en ...
  #1 (permalink)  
Antiguo 06/05/2013, 03:35
 
Fecha de Ingreso: mayo-2012
Ubicación: Palma de Mallorca
Mensajes: 71
Antigüedad: 12 años, 6 meses
Puntos: 1
¿Como acceder a archivos que están fuera del directorio de publicación?

Hola, estoy intentando implementar una descarga de archivos en una página, pero por motivos de seguridad y confidencialidad necesito que los archivos estén alojados en una carpeta fuera del directorio de publicación.

Los archivos son de tipo pdf, doc y docx.

Simplificando a máximo la cosa estoy probando a hacer las descargas con el siguiente código:

Código PHP:
Ver original
  1. <?php
  2.  
  3. $archivo="../../private/archivo.pdf";
  4.  
  5. header("Content-type: application/pdf");
  6. header("Content-Disposition: attachment; filename=$archivo");
  7.  
  8. readfile($archivo);

Cuando los pdf están alojados dentro del htdocs (o un subdirectorio cualquiera suyo) y lógicamente con la ruta relativa que corresponda, el tema funciona sin problemas, pero cuando meto los pdf en la carpeta private, que esta fuera de htdocs, aunque el script funciona el acrobat me da el siguiente error:

Cita:
Acrobat no pudo abrir '..-..-private-archivo.pdf' debido a que no es un tipo de archivo admitido o está dañado (por ejemplo, se envió como adjunto de correo electrónico y no se descodificó correctamente).
Mencionar que tanto la carpeta htdocs como la private tienen permisos 750.

¿Alguien sabe darme alguna orientación de lo que estoy haciendo mal?

No se si es un problema de rutas, de permisos, de configuración del servidor tal vez... ¿alguna pista?

Gracias a todos por adelantado.

Saludos,

GMG
  #2 (permalink)  
Antiguo 06/05/2013, 03:41
pr0
 
Fecha de Ingreso: marzo-2004
Mensajes: 687
Antigüedad: 20 años, 7 meses
Puntos: 28
Respuesta: ¿Como acceder a archivos que están fuera del directorio de publicación?

Para acceder a archivos que están fuera del public tienes que indicar la ruta completa.

Aún así no se porque te complicas tanto. Yo pondría los archivos en un directorio del public y dentro un .htaccess con lo siguiente:

Código Apache:
Ver original
  1. order deny, allow
  2. deny from all
  3. allow from 127.0.0.1
  #3 (permalink)  
Antiguo 06/05/2013, 03:48
 
Fecha de Ingreso: mayo-2012
Ubicación: Palma de Mallorca
Mensajes: 71
Antigüedad: 12 años, 6 meses
Puntos: 1
Respuesta: ¿Como acceder a archivos que están fuera del directorio de publicación?

Cita:
Iniciado por pr0 Ver Mensaje
Para acceder a archivos que están fuera del public tienes que indicar la ruta completa.

Aún así no se porque te complicas tanto. Yo pondría los archivos en un directorio del public y dentro un .htaccess con lo siguiente:

Código Apache:
Ver original
  1. order deny, allow
  2. deny from all
  3. allow from 127.0.0.1
Gracias por la rapidísima respuesta, pr0.

Perdona mi ignorancia pero es que no se nada de apache, htaccess, etc. Por otra parte el servidor no es apache es Nginx ¿Sabes cual sería la forma de hacerlo?

Y una última pregunta, me da un poco de corte pero ¿Como indico la ruta absoluta de una carpeta que esté fuera del public? porque si indico http://www.loquesea.com/ruta/completa entro al public, ¿no?.

Repito, perdona mi ignorancia, hay muchas cosas de las que (todavía ) no se nada.

Gracias otra vez,

GMG
  #4 (permalink)  
Antiguo 06/05/2013, 03:59
pr0
 
Fecha de Ingreso: marzo-2004
Mensajes: 687
Antigüedad: 20 años, 7 meses
Puntos: 28
Respuesta: ¿Como acceder a archivos que están fuera del directorio de publicación?

Cuando se habla de ruta completa se habla de ruta a nivel de sistema operativo no de directorio web.

Para Nginx el codigo del .htaccess sería:

Código PHP:
Ver original
  1. # nginx configuration
  2. deny all;
  3. allow 127.0.0.1;
  #5 (permalink)  
Antiguo 06/05/2013, 04:07
 
Fecha de Ingreso: mayo-2012
Ubicación: Palma de Mallorca
Mensajes: 71
Antigüedad: 12 años, 6 meses
Puntos: 1
Respuesta: ¿Como acceder a archivos que están fuera del directorio de publicación?

Hola pr0

¿Cuando dices ruta a nivel de SO quieres decir algo como localhost/private/archivo.pdf? o a que te refieres (o un sencillo ejemplo si es posible).

¿En cuanto a la configuración de Nginx, se debe escribir en un archivo htaccess o como se tiene que llamar el archivo y donde hay que ponerlo?.

Gracias por tu ayuda.

GMG
  #6 (permalink)  
Antiguo 06/05/2013, 04:13
pr0
 
Fecha de Ingreso: marzo-2004
Mensajes: 687
Antigüedad: 20 años, 7 meses
Puntos: 28
Respuesta: ¿Como acceder a archivos que están fuera del directorio de publicación?

Es un archivo .htaccess igual que en apache.

localhost/private/archivo.pdf es una ruta absoluta a nivel de SO?

En el momento que pones localhost estas trabajando con rutas web, una ruta a nivel de SO sería /home/usuario12/private
  #7 (permalink)  
Antiguo 06/05/2013, 04:23
 
Fecha de Ingreso: mayo-2012
Ubicación: Palma de Mallorca
Mensajes: 71
Antigüedad: 12 años, 6 meses
Puntos: 1
Respuesta: ¿Como acceder a archivos que están fuera del directorio de publicación?

Ok.

Mira, he obtenido la ruta de mi servidor de esta manera,

<?php
echo dirname(__FILE__);
?>

y me devuelve algo como:

/var/www/vhosts/mi-dominio.com/httpdocs

luego he actualizado mi script cambiando la variable del archivo a :

$archivo="/var/www/vhosts/mi-domino.com/private/archivo.pdf";

y sigo teniendo el mismo problema. ¿Que hago mal ahora?

Perdona el tostón que te estoy dando, es que tengo casi acabada la web y no la puedo subir a pruebas/producción por este tema.

Gracias,

GMG
  #8 (permalink)  
Antiguo 06/05/2013, 04:29
pr0
 
Fecha de Ingreso: marzo-2004
Mensajes: 687
Antigüedad: 20 años, 7 meses
Puntos: 28
Respuesta: ¿Como acceder a archivos que están fuera del directorio de publicación?

La carpeta private ya estaba creada en el dominio o la has creado tu?

De verdad sigo sin entender porque te empeñas en no utilizar el archivo .htaccess, es lo mas limpio y por supuesto es seguro.
  #9 (permalink)  
Antiguo 06/05/2013, 04:37
 
Fecha de Ingreso: mayo-2012
Ubicación: Palma de Mallorca
Mensajes: 71
Antigüedad: 12 años, 6 meses
Puntos: 1
Respuesta: ¿Como acceder a archivos que están fuera del directorio de publicación?

Ya estaba creada, pero puedo pedir que me creen cualquier carpeta con los permisos que haga falta. La solución del htaccess me vale (bueno, tengo que probarla pero me puede valer, por supuesto) lo que pasa es que quería entender/aprender sobre este problema.

No quiero abusar de tí. Me has sido de mucha ayuda. Ahora probaré lo del htaccess. Si me va bien postearé para dar por cerrado el tema.

Gracias de nuevo.

GMG
  #10 (permalink)  
Antiguo 06/05/2013, 04:41
pr0
 
Fecha de Ingreso: marzo-2004
Mensajes: 687
Antigüedad: 20 años, 7 meses
Puntos: 28
Respuesta: ¿Como acceder a archivos que están fuera del directorio de publicación?

Insisto, no le des mas vueltas, no merece la pena perder el tiempo. Utiliza un .htaccess que para estos casos es lo que hace todo el mundo.

Hay que ser productivo y cuando se tenga tiempo libre investigar estas inquietudes.
  #11 (permalink)  
Antiguo 06/05/2013, 04:56
 
Fecha de Ingreso: mayo-2012
Ubicación: Palma de Mallorca
Mensajes: 71
Antigüedad: 12 años, 6 meses
Puntos: 1
Respuesta: ¿Como acceder a archivos que están fuera del directorio de publicación?

Pues probada la configuración del Nginx con el htaccess tal y como indicaste y funciona perfecto. Puedo acceder desde el propio servidor pero no por url directamente.

Hasta la próxima y mil gracias!!!

GMG

Etiquetas: directorio, fuera
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:10.