Forzar la descarga de archivos con PHP
Esta es una versión mejorada de la función force_download que encontré en 21 Really Useful & Handy PHP Code Snippets y publique en Función PHP para forzar la descarga de archivos. Digo mejorada por que permite pasarle algunos parámetros para hacerla mas flexible.
function download_file($filename, $name = NULL, $mime_type = 'application/octet-stream') {
if (!is_file($filename)) {
header('HTTP/1.0 404 Not Found', TRUE, 404);
return FALSE;
}
$name = is_null($name) ? basename($filename) : $name;
$size = filesize($filename);
header('Content-Description: File Transfer');
header("Content-Disposition: attachment; filename=$name");
header("Content-Type: $mime_type");
header("Content-Transfer-Encoding: binary");
header('Expires: 0');
header('Pragma: no-cache');
header("Content-Length: $size");
if(@readfile($filename) === FALSE) {
header('HTTP/1.0 500 Internal Server Error', TRUE, 500);
}
}
Forma de uso:
download_file('archivo55.avi');
En el segundo parámetro se puede indicar con que nombre el archivo debe descargarse por defecto.
download_file('archivo55.avi', 'pelicula.avi');
Y en el tercer parámetro se puede indicar el mime-type del archivo.
download_file('archivo55.avi', 'pelicula.avi', 'video/x-msvideo');