Articulos Relacionados:
- Forzar descargas con PHP (June 27th, 2007)
- Cargar archivos con php al servidor Upload (June 27th, 2007)
Posted: webmaster on June 27th, 2007 | Programacion PHP
Muchas veces queremos permitir que nuestros usuarios descarguen un archivo sin que éste sea visualizado en el navegador; como es el caso de los archivos .doc o .pdf. De esta manera, nuestros usuarios van a poder descargarlo para luego verlos en la aplicación correspondiente.
Este código que pongo a continuación está extraÃdo de php.net:
Código:
    $f = $_GET[“f”];
    header(“Content-type: application/octet-stream”);
    header(“Content-Disposition: attachment; filename=\”$f\”\n”);
    $fp=fopen(“$f”, “r”);
    fpassthru($fp);
?>
Para quer esto funcione, tendriamos que hacer referencia a la siguiente dirección en el navegador:
www.misitio.com/descargar.php?f=algo.doc
Esta acá está todo muy fácil y bonito, pero ¿qué pasa si un usuario avanzado pone ?f=index.php? Si si, puede descargar TODO.
Para solucionar esto, podemos pasar valores de ID por get, los cuales estarÃan almacenados en una base de datos.
Supongamos que tenemos una tabla llamada ‘archivos’, podemos tener 3 campos: id, archivo, descargas. Con un simple formulario podemos insertar todos los archivos que tenemos para descargar. Tenemos insertado el registro Nº1 con el archivo ‘texto.doc’ con 0 descargas (predeterminado en el campo de la tabla). Lo que hacemos ahora, en el enlace que ponemos para que nuestros usuarios desacarguen los archivos, es poner lo siguiente: descargar.php?f=1 y listo.
Ahora tenemos que modificar el archivo ‘descargar.php’ para que esto funcione. En el ejemplo, tenemos almacenados nuestros archivos en la carpeta ‘archivos’.
Código:
  Â
header(“Content-type:Â application/octet-stream”);Noten que tiene protecciones para cuando el GET esta vacio (descargar.php o descargar.php?id= ) y para cuando el registro no se encuentra en la base de datos.
Lo ideal serÃa aplicar un juego de registros en vez de la conexión “manual” que puse yo acá. Pueden seleccionar el nombre del archivo y la cantidad de descargas desde la base de datos, y al finalizar el scrip se hace un update sumando 1 a la cantidad de descargas.
Espero que os disfruten el script…
2 Comments so far
Search
This part could be utilised for showing ads and other stuff
It’s funny how people believe everything that is written in Internet. But it’s their own business, I don’t care about them. My opinion is that it’s such a bullshit!
I think that people should communicate, no matter where they do it – in real life or in Internet.