Essentiellement, vous ne pouvez pas générer le fichier CSV et le lien vers celui-ci en une seule fois. (Vous devez introduire le concept de "mode" de page et activer le mode de téléchargement via un ...pagename.php?mode=download ou similaire. Vous pouvez ensuite utiliser l'instruction switch de PHP pour activer $_GET['mode'] dans votre script.)
Cela dit, l'en-tête de type de contenu text/csv que vous utilisiez est correct, bien que vous souhaitiez peut-être également afficher les en-têtes Content-Length et Content-Disposition. Après avoir sorti les données du fichier, assurez-vous également d'arrêter tout traitement de script supplémentaire via la exit
de PHP. fonction.
De plus, il serait probablement beaucoup moins compliqué (et sera certainement plus rapide/plus économe en mémoire) d'utiliser MySQL SÉLECTIONNER ... DANS OUTFILE installation (si vous avez les permissions) plutôt que d'utiliser PHP pour collecter les données.