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');
CompartirTwitter Facebook Google+ Pinterest LinkedIn Flipboard Delicious Addthis