El cliente no sabe que es un archivo CSV (¡después de todo es solo texto!).
Intente agregar esto ANTES de cualquier salida (en la parte superior de su secuencia de comandos):
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=file.csv");
header("Pragma: no-cache");
header("Expires: 0");
Básicamente, le estás diciendo al cliente/navegador que los datos que enviarás en un archivo CSV.
Eso debería funcionar.
Puede encontrar más información sobre encabezados allí:http://php.net/manual/ es/function.header.php