envoyer lien download ds mail - PHP - Programmation
Marsh Posté le 01-12-2010 à 01:06:44
Hello totoluc, figure toi que je me pose exactement la même question au même moment que toi ...
Donc je n'ai pas encore la réponse mais l'union (des ignorants) fait la force ...
Marsh Posté le 01-12-2010 à 09:31:05
tu envois un lien de type
Code : |
avec QIGHEROBGQER43TRFQBN qui est une clé générée dynamiquement ( exemple md5(time().' '.$nomFichier.' '.$idUser .... )
Tu as une table avec les champs cle, nomfichier, iduser, datedegeneration,.....
lorsque la personne clique sur ce lien, il arrive donc a une page dl.php
1/ tu vérifié que la clé existe
2/ tu vérifie qu'elle est encore valide ( nombre de téléchargement, date, .... )
3/ tu recherches le fichier associé en base
4/ tu li le ficheir ( stocké dans un repertoire non accessible directement) et tu l'envoies au navigateur, avec readfile par exemple
Marsh Posté le 02-12-2010 à 19:26:53
Ouais, mais lors du téléchargement, il va récupérer le chemin réel du fichier et va pouvoir le diffuser ou le télécharger quand il souhaite. Le seul moyen est une copie à un endroit spécifique et temporaire, ou un réécriture de l'url avec des variables pour empêcher la localisation du fichier.
Marsh Posté le 02-12-2010 à 20:20:40
non, le seul lien qu'il aura c'est celui que j'ai donné un peu plus haut qui ne donne qu'un accès indirect au fichier
Marsh Posté le 03-12-2010 à 03:40:23
flo850 a écrit : tu envois un lien de type
|
Salut flo850
Ca a l'air nickel comme technique mais je ne suis pas au top niveau codage php ... Tu aurais un lien vers un tutoriel ou plus de détails ?
Merci beaucoup !!!
Marsh Posté le 03-12-2010 à 11:44:31
En même temps, il t'a donné toute la marche à suivre.
En détaillant un peu plus :
1. Tu crées une table downloads :
id CHAR(32) PRIMARY KEY,
path VARCHAR(255),
date_validite / n_telechargements_autorises / ...
2. tu stockes tes fichiers dans un dossier qui n'est pas accessible via le serveur HTTP (soit en mettant le dossier ailleurs que le site, soit avec un htaccess sous apache, ...)
3. à l'envoi du mail :
tu crées un id aléatoire avec md5 par exemple
Code : |
tu insères dans ta base données un enregistrement avec l'id en question et le chemin du fichier (attention aux doublons d'id ! => gestion des exceptions)
tu envoies le mail avec un lien vers http://tonsite/script_de_telecharg [...] _ci_dessus
4. dans le script de telechargement
- tu recupères l'id en paramètre
- tu recupères l'enregistrement en base correspondant
- tu verifies la validite (date, nombre de telechargements)
- tu incrementes en base le nombre de telechargements (si tu fais une restriction dessus), ou tu supprimes l'enregistrement pour empecher de retelecharger, ...
- tu envoies les headers correspondants au type de fichier
- tu envoies le fichier avec readfile
5. tu fais un script de suppression des trop vieux enregistrements dans la base.
Si tu peux, tu appelles ce script dans un cron, sinon tu peux le faire à chaque téléchargement, ou sur une action de l'admin.
EDIT : tu peux aussi utiliser md5( uniqid() ) pour générer un id aléatoire de 32 caractères ...
Marsh Posté le 16-11-2010 à 14:20:22
Bonjour
Après de nombreuses recherches je n'arrive pas à savoir comment faire la chose suivante.
Lorsqu'un utilisateur a payé sur un site, lui faire parvenir un mail dans lequel il trouvera un lien de download vers un fichier (mp3, pdf, zip...).
Je sais envoyer un mail en php. Mon souci principal concerne la sécurité, la disponibilté du fichier. Je souhaite qu'il soit le seul à pouvoir télécharger le fichier.
- Je souhaite pouvoir limiter dans le temps son accès au fichier : 1 semaine par exemple. Comment ne pas devoir enlever physiquement le fichier du serveur ?
- comment éviter que le client envoie mon lien à un robot chinois, ou plutot comment éviter qu'un autre se serve du lien.
C'est bête, ça se fait sur tous les sites marchands, mais je trouve pas comment faire. Il doit y avoir des procédures plus employées que d'autres... Si vous avez une piste, un script, histoire que que je ne mette pas 1 mois à réinventer le for-next.
Toute idée ou suggestion est bienvenue.
Merci