Quiero ocultar la ubicación de la carpeta de descarga para que cuando el usuario descargue un archivo no pueda ver la ubicación. Creo que esto se puede hacer usando un archivo .htaccess, pero ¿cómo hago esto? Alternativamente, ¿cómo se puede hacer esto con PHP?cómo ocultar la ubicación de la carpeta de descarga real
Respuesta
Esta es la forma en que lo hago en PHP:
<?php
$fakeFileName= "fakeFileName.zip";
$realFileName = "realFileName.zip";
$file = "downloadFolder/".$realFileName;
$fp = fopen($file, 'rb');
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=$fakeFileName");
header("Content-Length: " . filesize($file));
fpassthru($fp);
?>
Además, si no quiero que nadie tenga acceso a la ubicación del archivo, coloque un archivo llamado .htaccess
en la carpeta de descarga con sólo el contenido :
deny from all
He cambiado el código un poco. Primero, cuando digo nombre de archivo falso y nombre de archivo real, el nombre de archivo falso es el nombre con el que el programa de descarga descargará el archivo, donde el nombre real es el nombre del archivo real en la carpeta de descarga de su servidor.
Además, verifico para asegurarme de que el usuario haya iniciado sesión y pueda descargar el archivo. Si se opta por descargar el archivo, un archivo PHP que se llama en una nueva pestaña (con el código de descarga de la anterior), y luego al final del archivo que tengo la línea:
exit;
Así que cuando se hace clic en el enlace de descarga, una página en blanco aparece rápidamente en una nueva pestaña, luego sale rápidamente y comienza la descarga.
EDIT: enlace La descarga se ve algo como esto:
<a href="simpleDown.php?id=<?php echo $_GET['id']; ?>" target="_blank">Download!</a>
Dónde id
es el id
de la descarga en la base de datos, y en el script descarga desde arriba encuentro la entrada con ese id
, luego obtenga su nombre de archivo real y el nombre de archivo falso. Sin embargo, puedes hacer esto sin la base de datos.
Quizás le interese examinar Mod Rewrite o usar su script PHP para poder acceder al archivo simplemente yendo a file.php?f=someHash
y luego usar una secuencia de octetos para obligar al usuario a descargar el archivo.
+1 - Esta sería la solución ideal. Pasar todas las descargas a través de un script PHP no solo significa que puede mover el directorio de datos fuera de la raíz pública, sino que también puede colocar controles de seguridad en la parte superior. Lo ideal es que tampoco haga referencia a los archivos por nombre de archivo; utilice una ID que se correlacione con el archivo para que el nombre pueda modificarse a voluntad sin romper los enlaces existentes. – michael
Lo que vas a querer hacer es hacer que el usuario se dirija a fake_url.php
y luego volver a escribir esa URL en un archivo diferente - real_url.php
. Esto efectivamente muestra el real_url.php
como oculto porque el usuario desconoce la redirección que ocurre en su archivo .htaccess
.
RewriteRule fake_url.php(.*)$ real_url.php?$1 [L,QSA]
En su real_url.php
, puede leer los parámetros que se pasan a través de la redirección y luego usar algo similar a readFile()
para enviar el archivo correspondiente al usuario desde dentro real_url.php
De modo que el usuario sólo verá la URL -
https://my-secret-site/download.php?file=file_to_download
Y en su real_url.php
sabrá qué archivo se solicitó al inspeccionar el parámetro $_GET['file']
.
La ubicación real de los archivos que el usuario está descargando ya no importa. Todas las descargas pasan por fake_url.php
y solo esa secuencia de comandos necesita conocer la ubicación real de la carpeta de descargas.
Creo que la parte principal es "escribir en .htaccess", que se puede hacer simplemente con fwrite, pero esta solución no funcionará si le está dando al usuario, una opción de lectura en línea del pdf porque en este caso el socket hay que abrir más tiempo (de alguna manera, si usted hace esto, entonces esto puede poner en peligro su seguridad!),
<?php
session_start();
$fileLocation = getenv("DOCUMENT_ROOT") . "your_download _folder/.htaccess";
$file = fopen($fileLocation,"w");
$k="\.(md|htaccess)$";
$content = "IndexIgnore *
Order Deny,Allow
Deny from All
AddType application/octet-stream .pdf";
fwrite($file,$content);
fclose($file);
$p=getenv("DOCUMENT_ROOT") . "your_download _folder/".$_SESSION['x'](file_to_be_downloaded !);
header("Content-type:application/pdf");
header("Content-Disposition:attachment;filename=".$_SESSION['x']);
readfile($p);
$fileLocation = getenv("DOCUMENT_ROOT") . "your_download _folder/.htaccess";
$file = fopen($fileLocation,"w");
$k="\.(md|htaccess)$";
$content = "IndexIgnore *
Order Allow,Deny
Deny from All
AddType application/octet-stream .pdf";
fwrite($file,$content);
fclose($file);
exit;
?>
Resultado: en la siguiente ventana (que se cerró en el momento siguiente), una la opción de descarga de archivos se activará para el usuario.
- 1. ¿Cómo obtener la carpeta de descarga del usuario en Qt?
- 2. Cambiar la ubicación de la carpeta EditorTemplates
- 3. Cómo cambiar la ubicación de descarga de Gradle
- 4. Obteniendo la ubicación de la carpeta System32 con java
- 5. python subprocess.Popen ocultar real "nombre de la pantalla"
- 6. Modifique Reescribir Ocultar Carpeta
- 7. iOS carpeta temporal ubicación
- 8. squirrel sql configuración del cliente ubicación de la carpeta
- 9. ¿Cómo cambiar la ubicación de la carpeta `web root` de EasyPHP?
- 10. ¿Necesita encontrar la ubicación real de la línea/char en los errores de Internet Explorer Script?
- 11. ¿Cómo puedo ocultar la pista de UISlider?
- 12. Descarga de la batería al utilizar CoreLocation Monitorización de ubicación significativa y CoreBluetooth
- 13. ¿Es posible cambiar la ubicación de la carpeta "Migraciones" de EF Migrations?
- 14. Cambiar la ubicación de php.ini
- 15. Abrir el diálogo de archivos para la ubicación de FTP
- 16. ¿Cambiar la ubicación de la carpeta pública en el proyecto Zend_Framework?
- 17. Copie el archivo desde la ubicación de configuración a otra ubicación en wix en la instalación
- 18. Transmisión de video/audio en tiempo real (descarga no progresiva)
- 19. ¿Cómo funciona la descarga HTTP?
- 20. android: cómo ocultar la carpeta para que no aparezca en la Galería
- 21. doctrine2 - ¿Cómo mejorar la eficiencia de descarga?
- 22. ¿Cómo obtener el estado de la descarga?
- 23. ¿Cómo escribir archivos en la carpeta de activos o la carpeta sin formato en Android?
- 24. ¿desea ocultar la imagen cuando no se encuentra la imagen en la ubicación del src?
- 25. ClickOnce - Carpeta de publicación frente a la carpeta Instalación
- 26. Comprobación del tamaño de descarga antes de la descarga
- 27. Cómo buscar la carpeta
- 28. UIPopoverController que altera la ubicación de UIPopoverArrowDirection
- 29. Cómo proteger la transmisión de videos desde la descarga
- 30. ¿Cómo se ejecuta la función ajax antes de la descarga?
No, no puedes. Esto es algo básico para que el usuario haga lo que quiera con el archivo que está descargando. – yent
Creo que quiere decir cómo ocultar la URL del script de descarga – michael
@yent en realidad solo quiero ocultar la ubicación del usuario donde existe el archivo –