Se trata de que compongas tus cabeceras HTTP adecuadas para indicar al navegador que el archivo a descargar tiene tal nombre. Eso se hace como menciono por cabeceras HTTP y en PHP se "envian" con la función:
header()
www.php.net/header
Seguidamente tienes que leer y enviar al buffer de salida tu archivo para completar la "entrega" del archivo. Esto se hace de una con la función:
readfile()
www.php.net/readfile
El nombre se indica en la cabecera HTTP de tipo:
Código PHP:
header('Content-Disposition: attachment; filename="'.$filename.'.'.$type.'"');
Concretamente en "filename" .. ahí le indicas el nombre que tendrá cara a la descarga.
Todo esto te funcionará si tu servidor HTTP no verifica el formato MIME del archivo en sí (que no tiene nada que ver con la extensión pues es un dato que va incrustrado dentro del archivo en sí como "cabeceras").
Un saludo,