Forzar descargas con PHP

La idea de este tip, es explicar como hacer que cualquier tipo de archivo (siempre que se tengan permisos de lectura sobre el mismo ) sea descargable. Es muy sencillo y sólo consta de unas pocas lineas de código.

<?php

   //Código generado por php.net
$f = $_GET["file"];
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename="$f"n");
$fp=fopen("$f", "r");
fpassthru($fp);

?> 

Creamos un archivo que contenga el código arriba descripto, lo guardamos, y, para probar si funciona podemos hacer lo siguiente:

Llamamos el archivo, a modo de ejemplo, “descarga.php”. Creamos un archivo html, al que llamamos “ejemplo.html”, que contenga un “Hola mundo!”.

Ahora bien, ubicamos los dos archivos dentro del mismo directorio y llamamos a descarga.php de la siguiente forma (suponiendo que ambos archivos esten en el raiz de nuestro servidor local):

http://localhost/descarga.php?file=ejemplo.html

De este modo podremos descargar “ejemplo.html”. Cabe aclarar que esto es aplicable a cualquier tipo de archivo, siempre teniendo en cuenta que debemos tener permisos de lectura al menos sobre el mismo.