IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Creer un lien de téléchargement "temporaire"


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Inscrit en
    Mars 2003
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Mars 2003
    Messages : 281
    Points : 187
    Points
    187
    Par défaut Creer un lien de téléchargement "temporaire"
    Bonjour,

    j'ai un petit problème technique. sur mon site j'ai un espace client ou je veux proposer des fichiers en téléchargement. Jusque là rien de bien sorcier.

    Là ou ca se gatte => Je veux que le fichier soit accessible via un code de téléchargement personnalisé et non via une url un peu comme les liens mails d'activation


    Imaginons un dossier Download contenant le fichier Patch001.zip
    * je ne veux pas que le fichier soit accessible directement via une url par son nom
    * le user va sur son espace web et affiche la liste des téléchargements possibles pour lui.

    Il doit voir "Patch001.zip" mais le lien doit être par exemple du type : lesite/download?1616ad5165fb....

    le patch001.zip étant distribué à plusieurs user, chacun doit le voir avec un lien différent sans pour autant qu'on soit obliger de dupliquer le fichier sur le disque

    Ce lien doit être associé à l'utilisateur =>
    - si le user n'est pas identifié, ca ne doit pas fonctionné
    - donc un bookmark sur le lien "patch001.zip" qui est retapé dans la barre d'adresse, ne doit plus fonctionner si le bon user n'est pas connecté.

    L'intêret du système étant de sécuriser les échanges de fichiers via l'espace de téléchargement

    Toutes idées est la bienvenue

    Merci

    Configuration serveur =>
    Serveur Apache
    PHP 5
    Mysql

  2. #2
    Membre confirmé Avatar de d-Rek
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2007
    Messages : 438
    Points : 455
    Points
    455
    Par défaut
    Salut !

    Tu crées une table code contenant les champs suivants : key, #id_member, path (key étant la clé primaire et id_member est une clé étrangère)

    Pour atttribuer une clé et une fichier à un membre, tu insères dans cette table, la clé (code), l'identifiant du membre (provenant de la table des membres) et le chemin du fichier.

    Ta page download recherche dans la table où il y a la clé key et que l'identifiant du membre est présent.
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    $sql=mysql_query("SELECT path FROM code WHERE key='".htmlspecialchars($_GET['key'], ENT_QUOTES)."' AND id_member='".$_SESSION['id_member']."'");
    if(mysql_num_rows(mysql_query($sql))==1){ // il y a un unique résultat (code unique)
    	$rs=mysql_fetch_array($sql); // on met le résultat dans un RS
    	$filename = substr($rs['path'], strrpos($rs['path'], "/"));
     
    	// téléchargement du fichier
    	header('Content-disposition: attachment; filename='.$filename);
    	header('Content-Type: application/force-download');
    	header('Content-Transfer-Encoding: fichier'); 
    	header('Content-Length: '.filesize($rs['path']));
    	header('Pragma: no-cache');
    	header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
    	header('Expires: 0');
    	readfile($rs['path']);
    }else{
    	echo 'Code inconnu pour ce membre.'; // Message d'erreur ou :
    	//Header('location: index.php'); // va t'en de là
    }
    ?>

    Finguers in the nose !
    (oublie pas le bouton résolu)

  3. #3
    Membre habitué
    Inscrit en
    Mars 2003
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Mars 2003
    Messages : 281
    Points : 187
    Points
    187
    Par défaut
    Presque ca
    Je ne veux pas stocker les chemins dans la base mais ca c'est un détail très facilement gérable

    Par contre, j'ai une interrogation sur :
    header('Content-disposition: attachment; filename='.$filename);
    Est-ce que ceci rend le chemin réél du fichier visible par l'internaute ?

    Par exemple quand on utilise un gestionnaire de téléchargement, l'url du fichier à télécharger est intercepté et enregistré, ce qui permet de le relancer plus tard.

    Mon pb, c'est que :
    1- le lien ne doit fonctionner que si l'utilisateur est venu s'authentifier au préalable,
    2- le lien ne doit fonctionner que si l'utilisateur à toujours les bons droits sachant que la gestion des droits est purement interne. je n'utilise pas les droits linux pour controller l'accès aux fichiers

    Il arrive sur l'écran d'authentification (ca c'est déja géré)
    Je lui affiche plusieurs fichiers téléchargeables (ca c'est déja géré)

    Sur le serveur :
    MonSite\Public\www\ et le répertoire racine et contient les pages du site
    MonSite\Private\Files\ contient les fichiers téléchargeables ce dossier n'étant pas accessible par le web

    Prenons les fichiers:
    \home\MonSite\Public\www\espaceclient.php
    \Home\MonSite\Private\files\plugin_pppp.zip


    Et par exemple le lien suivant sur la page web:
    Plugin ppppp. télécharger le fichier

    Quand je clic sur télécharger le fichier, je dois avoir "téléchargement de plugin_ppp.zip" avec comme lien http://monsite/EspaceClient.php?getf...6818900566546d

    est-ce faisable ?

  4. #4
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 838
    Points
    2 838
    Par défaut
    Tu fais un base64_encode() de plusieurs variables :

    $_SESSION['id_session'].$pseudo.$secret_key.$url_fichier

    Au moment du DL, tu check si tout est OK

    Tu peux normalement récup l'URL du fichier grâce à base64_decode()

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo