Mise en place du script
Créez un fichier nommé "telecharge.php" et inscrivez ce code:
<? if (isset($_GET['doc']) && !empty($_GET['doc']) ) { /* Note: il faut obligatoirement une condition pour le téléchargement ici sinon on pourrait télécharger le code source de vos scripts PHP on pourrait aussi faire appel à une base de données avec un champ ID (identifiant unique) passé en paramètre. */ if ( isset($_GET['dir']) ) $filename = BASE_DIR . '/' . $_GET['dir'] . '/' . $filename; else $filename = BASE_DIR . '/' . $filename; header('Content-type: application/octet-stream'); header('Content-Disposition: attachment; filename='.$_GET['doc']); if ( ($fp = fopen($filename,'rt')) ) { fpassthru($fp); fclose($fp); } else echo 'Impossible d\'ouvrir le fichier suivant: '.$_GET['doc']; } exit(); ?>
Utilisation
- Pour le fichier http://membres.lycos.fr/VOTRE_LOGIN/fichier.php:
<a href="telecharge.php?doc=fichier.php">fichier.php</a> - Pour le fichier http://membres.lycos.fr/VOTRE_LOGIN/dossier/fichier.php:
<a href="telecharge.php?doc=fichier.php&dir=dossier">fichier.php</a>
Attention, il ne faut mettre de barre oblique (slash) à la fin du répertoire/dossier.
Avertissement
Il faut à tout prix contrôler la nature des fichiers télécharger. Par exemple, on pourrait permettre seulement le téléchargement de fichier .zip ou encore .doc . Pour quelle raison? Si on ne limite pas ce script, quelqu'un pourrait télécharger le code source de vos fichiers PHP.
Exemple de protection simple
Téléchargement de fichiers: .jpg
<? if (isset($_GET['doc']) && !empty($_GET['doc']) ) { if ( isset($_GET['dir']) ) $filename = BASE_DIR . '/' . $_GET['dir'] . '/' . $filename . '.jpg'; else $filename = BASE_DIR . '/' . $_GET['doc'] . '.jpg'; header('Content-type: application/octet-stream'); header('Content-Disposition: attachment; filename='.$_GET['doc'] . '.jpg'); if ( ($fp = fopen($filename,'rt')) ) { fpassthru($fp); fclose($fp); } else echo 'Impossible d\'ouvrir le fichier suivant: '.$_GET['doc'] . '.jpg'; } exit(); ?>
Appel: <a href="telecharge.php?doc=screenshot800600">Télécharger screenshot800600.jpg</a>
Appel d'une image JPG dans un répertoire:
<a href="telecharge.php?doc=moi&dir=photos">Télécharger photos/moi.jpg</a>