¿Cómo evito las descargas públicas de archivos usando php?

Tengo un script que solo permite a los usuarios autorizados cargar archivos en una determinada carpeta.

Sin embargo, no sé cómo evitar que las personas descarguen libremente sin iniciar sesión.

Necesito la solución en php.

He buscado en Google, pero nada sencillo todavía.

Actualmente, en mi raíz de documento, tengo una carpeta llamada admin y una subcarpeta llamada uploads dentro del administrador. Por lo tanto, solo se puede subir la función de administrador. Tanto el editor como el administrador pueden descargar. ¿Qué debería hacer en este caso?

Por favor avise.

Coloque los archivos en algún lugar fuera del directorio webroot público o configure su servidor para que no sirva los archivos. Mientras su servidor sirva felizmente todo con una URL válida, no hay nada que pueda hacer con PHP para evitar eso.


Si sus archivos están en la carpeta /public_html/ , /secret_files/ de esa carpeta y colóquelos en eg /secret_files/ , para que la estructura de su directorio se vea así:

 public_html/ index.html admin/ admin_index.php secret_files/ my_secret_file.txt 

El servidor web solo está configurado para servir archivos en el directorio /public_html/ , de modo que nadie tendrá acceso a directorios externos (término técnico anterior ).

Para permitir que alguien descargue esos archivos, haga lo que cletus sugiere y use readfile para “servir manualmente” los archivos a través de un script PHP. PHP aún tendrá acceso a estas otras partes del sistema de archivos, por lo que puede usarlo como guardián de acceso.

No almacene los archivos en un directorio debajo de la raíz del documento.

En su lugar, muévalos a otro lugar y luego un script PHP puede determinar mediante progtwigción si alguien puede descargarlos y luego usar readfile() o algo similar para transmitirlos al usuario.

También puede configurar el servidor web para que no sirva archivos desde este directorio, pero luego necesita que PHP los atienda de todos modos. Es más limpio simplemente no ponerlos debajo de la raíz del documento.

Respuesta a la pregunta sobre cómo proteger con contraseña con PHP: Esto debería resolver su problema.