Im Wesentlichen können Sie die CSV-Datei und den Link dazu nicht auf einmal ausgeben. (Sie müssen das Konzept eines Seiten-"Modus" einführen und den Download-Modus über ein ...pagename.php?mode=download oder ähnliches aktivieren. Sie könnten dann die switch-Anweisung von PHP verwenden, um $_GET['mode'] einzuschalten. in Ihrem Skript.)
Der von Ihnen verwendete Header des Inhaltstyps text/csv ist jedoch korrekt, obwohl Sie möglicherweise auch die Header Content-Length und Content-Disposition ausgeben möchten. Nachdem Sie die Dateidaten ausgegeben haben, achten Sie auch darauf, jede weitere Skriptverarbeitung über den exit
von PHP zu stoppen Funktion.
Außerdem wäre es wahrscheinlich viel einfacher (und sicherlich schneller/speichereffizienter), MySQL SELECT ... INTO OUTFILE Einrichtung (wenn Sie die Berechtigungen haben), anstatt PHP zum Sammeln der Daten zu verwenden.