Está usted en Indice > Construcción > Lenguajes > PHP > Lecciones y Paso a Paso > Forzar descargas con PHP
Construcción
Maletín
Utilidades
Cursos
Promoción
Rentabilidad
Zona Novatos
Foros
Acceso a tu cuenta

Forzar descargas con PHP

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:

Forzar descargas con PHP

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.

Haciendo el script más seguro

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.

Listando los archivos descargables.

Ú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...

- Frases aleatorias con PHP
- Conectar directamente al servidor SMTP con PHP
- Diferentes formas de cerrar sesión en PHP
- Operadores Matemáticos en PHP
- Medir el tiempo de ejecución de tus script


Versión imprimible - Versión imprimible de este documento
Enviar e-mail - Enviar por e-mail este documento
Publicidad

Información legal | Política de Privacidad | Contacte con nosotros

Otro proyecto de Factoría de Internet. Copyright© 2003-2008 Factoría de Internet S.L.. Todos los derechos reservados.


Página generada el 28-08-2008 a las 12:06:12