En esta ocasión les explico como realizar a la fuerza la descarga de un archivo, ya que en algunas ocasiones deseamos descargar determinado archivo y este se visualiza directamente en el navegador.
La manera mas fácil seria esta:
$file = $_GET['file'];
header("Content-disposition: attachment; filename=$file");
header("Content-type: application/octet-stream");
readfile($file);
Pero este método no es muy seguro, porque podrian descargar nuestros archivos del servidor como el index.php, ademas tendremos que verificar si el archivo existe o no, el modo seguro seria el siguiente:
if (!isset($_GET['file']) || empty($_GET['file'])) {
exit();
}
$root = "images/";
$file = basename($_GET['file']);
$path = $root.$file;
$type = '';
if (is_file($path)) {
$size = filesize($path);
if (function_exists('mime_content_type')) {
$type = mime_content_type($path);
} else if (function_exists('finfo_file')) {
$info = finfo_open(FILEINFO_MIME);
$type = finfo_file($info, $path);
finfo_close($info);
}
if ($type == '') {
$type = "application/force-download";
}
// Definir headers
header("Content-Type: $type");
header("Content-Disposition: attachment; filename=$file");
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . $size);
// Descargar archivo
readfile($path);
} else {
die("El archivo no existe.");
}
Ahora solo colocamos nuestro enlace de descarga.
<a href=”download.php?file=imagen.jpg”>Descargar</a>
y eso es todo , espero que le sirva.

