Klient neví, že jde o soubor CSV (je to koneckonců jen text!).
Zkuste toto přidat PŘED jakýmkoli výstupem (v horní části skriptu):
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=file.csv");
header("Pragma: no-cache");
header("Expires: 0");
V podstatě říkáte klientovi/prohlížeči, že data budete odesílat jako soubor CSV.
To by mělo fungovat.
Více informací o hlavičkách naleznete zde:http://php.net/manual/ en/function.header.php