Khách hàng không biết đó là tệp CSV (xét cho cùng thì đó chỉ là văn bản!).
Cố gắng thêm điều này TRƯỚC bất kỳ đầu ra nào (ở đầu tập lệnh của bạn):
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=file.csv");
header("Pragma: no-cache");
header("Expires: 0");
Về cơ bản, bạn đang nói với khách hàng / trình duyệt rằng dữ liệu bạn sẽ gửi tệp CSV.
Điều đó sẽ hoạt động.
Bạn có thể tìm thêm thông tin về tiêu đề tại đó: http://php.net/manual/ vi / function.header.php