O cliente não sabe que é um arquivo CSV (afinal, é apenas texto!).
Tente adicionar isso ANTES de qualquer saída (no topo do seu script):
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=file.csv");
header("Pragma: no-cache");
header("Expires: 0");
Basicamente, você está dizendo ao cliente/navegador que os dados serão enviados em um arquivo CSV.
Isso deve funcionar.
Você pode encontrar mais informações sobre cabeçalhos lá:http://php.net/manual/ pt/function.header.php