7
votes

Un script PHP pour laisser les utilisateurs télécharger un fichier de mon site Web sans révéler le lien de fichier réel sur mon site Web?

La question dit tout .. Comment puis-je laisser les utilisateurs télécharger un fichier de mon site Web et pas les laisser voir quel lien vient de ce fichier? Je comprends qu'il pourrait y avoir un besoin de quelque chose comme un download.php qui servira de passerelle mais après cette phase, je ne sais pas quoi de script ... Si cela vous dérange d'écrire le tout Code, quelques noms de fonction que je devrais avoir besoin d'utiliser soient vraiment utiles!


0 commentaires

4 Réponses :


1
votes

Vous pouvez utiliser la fonction en-tête () qui est documenté ici

Je suggérerais de faire défiler et de regarder le 1er exemple. Cela semble faire exactement ce que vous voulez.


1 commentaires

Juste une note pour Shedo Chung-Hee Surasi - Le deuxième exemple vous indique également comment vous pouvez spécifier un nom de fichier différent du nom du fichier d'origine (comme vous l'avez mentionné dans votre question).



10
votes

Trouver un moyen d'identifier le fichier à télécharger (par exemple, une variable Obtenir une variable correspondant à l'ID d'une ligne dans une base de données ou quelque chose qui le long de ces lignes). Faites sacrément sûr que c'est un problème valide, car vous ne voulez pas que vos utilisateurs puissent rien télécharger de votre site. Ensuite, utilisez en-tête code> avec Contenu-disposition code> Pour indiquer au navigateur Le fichier doit être téléchargé et readfile code> pour la sortie.

Par exemple: p>

<?php

$id = intval($_GET['id']);
$query = mysql_query('SELECT file_path FROM files WHERE id = ' . $id);
if (($row = mysql_fetch_row($query)) !== false)
{
    header('Content-Disposition: attachment; filename=' . basename($row[0]));
    readfile($row[0]);
}
exit;

?>


3 commentaires

Je me souviens d'utiliser une technique similaire pour l'exportation d'adresses électroniques dans un fichier CSV. L'en-tête de type de contenu a été ignoré par Safari pour Mac.


Est-ce que ce script est-il antiacressé? J'ai une règle HTACCESS pour refuser l'accès à une URL réelle au cas où la méthode a été contournée. Est-ce que nie de tout affecte également ce script?


@Codigostutoriels, règles dans les fichiers .htaccess uniquement sur les demandes Web d'un client. Ils ne font rien pour empêcher votre code serveur de lire des fichiers sur le serveur.



0
votes

Readfile devrait faire ce que vous voulez. Placez le fichier actuel en dehors de la racine du serveur Web et demandez des informations d'identification avant de passer le fichier.


0 commentaires

4
votes

Vous ne pouvez pas faire télécharger un fichier à partir d'une URL sans les informer de l'URL. Ce n'est pas possible sous la spécification HTTP. Tout ce qui est téléchargé a une URL.

Vous pouvez cependant avoir une URL de téléchargement qui ne fonctionne qu'une seule fois, ou nécessite que certaines informations spécifiques soient transmises via la méthode postale. Vous vérifiez un jeton dans les variables d'obtention ou de poste et invalendez ce jeton une fois qu'il est utilisé une fois.


0 commentaires