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');