Intinya, Anda tidak dapat menampilkan file CSV dan tautannya sekaligus. (Anda perlu memperkenalkan konsep "mode" halaman dan mengaktifkan mode unduh melalui ...pagename.php?mode=download atau yang serupa. Anda kemudian dapat menggunakan pernyataan switch PHP untuk mengaktifkan $_GET['mode'] dalam skrip Anda.)
Karena itu, header tipe konten teks/csv yang Anda gunakan sudah benar, meskipun Anda mungkin juga ingin menampilkan header Content-Length dan Content-Disposition. Setelah Anda mengeluarkan data file, pastikan juga untuk menghentikan pemrosesan skrip tambahan apa pun melalui exit
PHP fungsi.
Selain itu, mungkin akan jauh lebih mudah (dan tentunya akan lebih cepat/lebih hemat memori) untuk menggunakan MySQL PILIH ... KE OUTFILE fasilitas (jika Anda memiliki izin) daripada menggunakan PHP untuk mengumpulkan data.