Salut,
La modification du header ne fonctionne pas si tu a affiché quelque chose avant (html, javascript ...), sinon ca ne s'appellerait pas comme ça ^^ (entête). On le répète très souvent au gens mais bizarrement c'est quelque chose qu'il ont du mal à intégrer.
Le mieux pour ne rien afficher avant c'est encore de créer un fichier rien que pour ça.
Tu crées par exemple un fichier
fichier_a_telecharger.php et dedans tu mets :
$url = ('dossier/fichier_a_telecharger.txt');
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'. basename($url) .'";');
@readfile($url) OR die();
Et tu fais pointer ton lien vers
fichier_a_telecharger.php et ca provoquera le téléchargement de
fichier_a_telecharger.txt.
Pour ne pas recréer ce fichier pour tous tes téléchargement utilise les variables POST( formulaire) ou GET. Comme ça :
$url = ('dossier/'.$_GET['telecharger']);
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'. basename($url) .'";');
@readfile($url) OR die();
Et tu fais pointer ton lien sur :
fichier_pour_telecharger.php?telecharger=
fichier_a_telecharger.txt
Attention à la sécurité de ton site, il ne faut pas que n'importe qui puisse télécharger le fichier qu'il veut comme ça, par exemple en faisant :
fichier_pour_telecharger.php?telecharger=
index.php
Pour cela il te suffit d'imposer un dossier dans lequel tu télécharge et de ne rien mettre de critique dedans
$url = ('dossier_imposé/'.$_GET['telecharger']);
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'. basename($url) .'";');
@readfile($url) OR die();
Tu peux même imposer une extension :
$url = ('dossier_imposé/'.$_GET['telecharger'].'.txt');
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'. basename($url) .'";');
@readfile($url) OR die();
fichier_pour_telecharger.php?telecharger=
fichier_a_telecharger