Hacer descargables cualquier tipo de archivos no es muy complicado. La mayoría de las tecnologías del lado del servidor nos permiten hacer esto, en este caso veremos cómo es con PHP.
El script fue sacado del todopoderoso php.net y es el siguiente:
<?php $f = $_GET["f"]; header("Content-type: application/octet-stream"); header("Content-Disposition: attachment; filename="$f"n"); $fp=fopen("$f", "r"); fpassthru($fp); ?>
De esta forma, cuando necesitemos que el explorador quiera descargar, por ejemplo un archivo de imagen, lo llamaríamos descargar.php?f=imagen.jpg.
Y el navegador abrirá el diálogo de descarga:
Sencillo, no? Bien, pero podría haber serios problemas, dejar el script así podría hacer descargable cualquier tipo de archivo, incluyendo el código fuente de otros archivos php.
A continuación veremos cómo implementar algunas medidas de seguridad.
Aquí podemos tener dos opciones, enlistar los tipos de archivos que pueden ser descargables o listar las extensiones de los archivos que podemos descargar.
Además, para evitar que se pueda navegar en otros directorios, vamos a implementar una comprobación.
Útil cuando son relativamente pocos los archivos descargables, los nombres los metemos en un arreglo y hacemos una sencilla comprobación y listo.
<?php $archivos = array("imagen.jpg", "logo.png", "flash.swf"); $f = $_GET["f"]; if(strpos($f,"/")!==false){ die("No puedes navegar por otros directorios"); } if(!in_array($f,$archivos)){ die("<b>ERROR!</b> no es posible descargar $f"); } header("Content-type: application/octet-stream"); header("Content-Disposition: attachment; filename="$f"n"); $fp=fopen("$f", "r"); fpassthru($fp); ?>
De esta forma, si queremos descargar un archivo que no sean los que enlistamos en el arreglo, nos aparecerá el mensaje de error:
ERROR! no es posible descargar archivo.ext
Usuarios que han visto este tema también han visto...
- Encuesta con PHP
- Cacheando tus scripts para maxima optimizacion
- Reemplazar Texto en la Base de Datos
- Leer los datos de un archivo CSV con PHP
- Los Frameworks de PHP agilizan tu trabajo
Información legal | Política de Privacidad | Contacte con nosotros
Otro proyecto de Factoría de Internet. Copyright© 2003-2011 Factoría de Internet S.L.. Todos los derechos reservados.