Il cliente non sa che si tratta di un file CSV (dopotutto è solo testo!).
Prova ad aggiungere questo PRIMA di qualsiasi output (nella parte superiore dello script):
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=file.csv");
header("Pragma: no-cache");
header("Expires: 0");
Fondamentalmente, stai dicendo al client/browser che i dati che invierai sono un file CSV.
Dovrebbe funzionare.
Puoi trovare maggiori informazioni sulle intestazioni qui:http://php.net/manual/ it/function.header.php