Et qu'est-ce qui ne marche pas ? ça ouvre le fichier au lieu de le proposer en téléchargement ? Si c'est ça le plus simple est de mettre ton fichier dans une archive de type .zip ou .rar
Sinon il faudra passer par des header pour forcer le téléchargement. Par exemple :
code de la page php nommée "telechargement_fichier.php" qui force le téléchargement du fichier visugpx.gpx (en supposant que ce fichier soit dans le même répertoire que ce script)
<?php
$nom_fichier = 'visugpx.gpx';
$filesize = filesize($nom_fichier);
// Entêtes pour forcer le téléchargement, type de fichier, poids, nom
header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: text/xml");
header("Content-Length: ".$filesize);
header("Content-Disposition: attachment; filename=\"".$nom_fichier."\"");
// Différents code pour ne pas mettre le fichier dans le cache du navigateur
header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0, public");
header("Pragma: no-cache");
header("Expires: 0");
readfile($nom_fichier);
exit;
?>
Et dans ta page html
<a href="telechargement_fichier.php">télécharger</a>
Tu peux aussi passer en paramètre le nom du fichier par exemple
<a href="telechargement_fichier.php?fichier=visugpx.gpx">télécharger</a>
pour récupérer $_GET['fichier'] dans ta page php. Mais dans ce cas tu dois
absolument trouver un moyen pour contrôler la valeur de $_GET['fichier'] qui servira pour le téléchargement
sinon c'est une faille MAJEURE de sécurité (et ton site risque de ne pas survivre longtemps).