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 :

Autoriser le téléchargement d'un seul fichier


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 8
    Points : 4
    Points
    4
    Par défaut Autoriser le téléchargement d'un seul fichier
    Bonjour à tous,
    alors voilà je vous explique mon soucis :
    j'héberge actuellement un site internet sur lequel je propose le téléchargement de documents, j'utilise comme page de téléchargement, une simple page .php avec laquelle je permets le listing d'un dossier complet (où les documents se trouvent), cependant ma demande est celle-ci, comment je pourrai et avec quel code je pourrai autoriser uniquement le téléchargement d'UN seul fichier, juste autoriser le téléchargement d'un seul et unique fichier une fois l'accès à la page autorisée (parmis tous les fichiers listés).
    Merci de me venir en aide car la je stagne depuis un bon petit moment, merci beaucoup.

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    est ce que vous faites déjà passer le téléchargement par un script PHP, comme indiqué là ?
    https://www.developpez.net/forums/d1.../#post10151416

  3. #3
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Dans l'absolu ce n'est pas possible s'il n'y a pas de notions de paiement : un utilisateur avec deux comptes pourra télécharger deux fichiers.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #4
    Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Alors effectivement il y a bien notion de paiement grâce à un script Starpass qui vérifie aussi le paiement grâce au cookie :

    voici mon script actuel (la page accedée un fois le téléchargement effectuée) :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    <?php
    $dir_nom = '.'; // dossier listé (pour lister le répertoir courant : $dir_nom = '.' --> ('point')
    $dir = opendir($dir_nom) or die('Erreur de listage : le répertoire n\'existe pas'); // on ouvre le contenu du dossier courant
    $fichier= array(); // on déclare le tableau contenant le nom des fichiers
    $dossier= array(); // on déclare le tableau contenant le nom des dossiers
     
    while($element = readdir($dir)) {
    if($element != '.' && $element != '..' && strrchr($element,'.') != '.php') {
    if (!is_dir($dir_nom.'/'.$element)) {$fichier[] = $element;}
    else {$dossier[] = $element;}
    }
    }
     
    closedir($dir);
     
    if(!empty($dossier)) {
    sort($dossier); // pour le tri croissant, rsort() pour le tri décroissant
    echo "Liste des dossiers accessibles dans '$dir_nom' : \n\n";
    echo "\t\t<ul>\n";
    foreach($dossier as $lien){
    echo "\t\t\t<li><a href=\"$dir_nom/$lien \">$lien</a></li>\n";
    }
    echo "\t\t</ul>";
    }
     
    if(!empty($fichier)){
    sort($fichier);// pour le tri croissant, rsort() pour le tri décroissant
     
    echo "\t\t<ul>\n";
    foreach($fichier as $lien) {
    echo "\t\t\t<li><a href=\"$dir_nom/$lien \">$lien</a></li>\n";
    }
    echo "\t\t</ul>";
    }
    ?>
     
    <?php
    // Déclaration des variables
    $ident=$idp=$ids=$idd=$codes=$code1=$code2=$code3=$code4=$code5=$datas=''; 
    $idp = XXXXX; 
    // $ids n'est plus utilisé, mais il faut conserver la variable pour une question de compatibilité
    $idd = XXXXX; 
    $ident=$idp.";".$ids.";".$idd;
    // On récupère le(s) code(s) sous la forme 'xxxxxxxx;xxxxxxxx'
    if(isset($_POST['code1'])) $code1 = $_POST['code1']; 
    if(isset($_POST['code2'])) $code2 = ";".$_POST['code2']; 
    if(isset($_POST['code3'])) $code3 = ";".$_POST['code3']; 
    if(isset($_POST['code4'])) $code4 = ";".$_POST['code4']; 
    if(isset($_POST['code5'])) $code5 = ";".$_POST['code5']; 
    $codes=$code1.$code2.$code3.$code4.$code5; 
    // On récupère le champ DATAS
    if(isset($_POST['DATAS'])) $datas = $_POST['DATAS']; 
    // On encode les trois chaines en URL
    $ident=urlencode($ident);
    $codes=urlencode($codes);
    $datas=urlencode($datas);
     
    /* Envoi de la requête vers le serveur StarPass
    Dans la variable tab[0] on récupère la réponse du serveur
    Dans la variable tab[1] on récupère l'URL d'accès ou d'erreur suivant la réponse du serveur */
    $get_f=@file( "http://script.starpass.fr/check_php.php?ident=$ident&codes=$codes&DATAS=$datas" ); 
    if(!$get_f) 
    { 
    exit( "Votre serveur n'a pas accès au serveur de StarPass, merci de contacter votre hébergeur. " ); 
    } 
    $tab = explode("|",$get_f[0]);
     
    if(!$tab[1]) $url = "http://script.starpass.fr/error.php"; 
    else $url = $tab[1]; 
     
    // dans $pays on a le pays de l'offre. exemple "fr"
    $pays = $tab[2]; 
    // dans $palier on a le palier de l'offre. exemple "Plus A"
    $palier = urldecode($tab[3]); 
    // dans $id_palier on a l'identifiant de l'offre
    $id_palier = urldecode($tab[4]); 
    // dans $type on a le type de l'offre. exemple "sms", "audiotel, "cb", etc.
    $type = urldecode($tab[5]); 
    // vous pouvez à tout moment consulter la liste des paliers à l'adresse : http://script.starpass.fr/palier.php
     
    // Si $tab[0] ne répond pas "OUI" l'accès est refusé
    // On redirige sur l'URL d'erreur
    if( substr($tab[0],0,3) != "OUI" ) 
    { 
           header( "Location: $url" ); 
           exit; 
    } 
    else 
    { 
           /* Le serveur a répondu "OUI" 
    
           On place un cookie appelé CODE_BON et qui vaut la valeur 1 
           Ce cookie est valide jusqu'à ce que l'internaute ferme son navigateur 
           Dans les pages suivantes, nous testerons l'existence du cookie 
           S'il existe, c'est que l'internaute est autorisé, 
           sinon on le renverra sur une page d'erreur */ 
           setCookie( "CODE_BON", "1", 0 ); 
           // Si vous avez plusieurs documents, nommer le cookie plutôt 'code'+iDocumentId 
     
           // vous pouvez afficher les variables de cette façon : 
           // echo "idd : $idd / codes : $codes / datas : $datas / pays : $pays / palier : $palier / id_palier : $id_palier / type : $type"; 
    } 
    ?>

    Cordialement

  5. #5
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    vous avez regardé le lien que je vous ai indiqué ?

  6. #6
    Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    Merci pour votre réponse, oui j'en ai bien pris part et je vous en remercie, cependant ce n'est pas vraiment ce que je recherche, actuellement le visiteur procède au paiement, ensuite, il est redirigé vers la fameuse page où il doit sélectionner son fichier, le problème c'est que la page reste ouverte et il peut avoir accès à tous les autres fichiers si vous avez une piste je vous en serai très reconnaissant merci.

  7. #7
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    vous pouvez utiliser ce code pour faire cela.
    dans le code vous vérifiez si l'utilisateur a le droit de télécharger le fichier et si c'est le cas, vous envoyez le fichier.

  8. #8
    Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Merci de ta réponse je suis bloqué pour une dernière chose après ce sera choses faite
    j'utilise ce script php qui fonctionne à merveille grâce à tes conseils :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    $file = '/var/www/wordpress/wp-content/themes/insight/DossierInfo/'.$_POST['dossierInf'].'.pdf';
     
    if (file_exists($file)) {
    header("Content-type: application/force-download");
    header('Content-Disposition: attachment; filename='.$file);
    readfile($file);
    exit;
    } else {
    echo "Le fichier $file n'existe pas.";
    }
    ?>

    HTML

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <form method="post" action="downloadpdf.php">
    <select name="filename">
    <option value="fichier1">mon fichier1</option>
    <option value="fichier2">mon fichier2</option>
    </select>
    <input type="submit" value="telecharger" />
    </form>


    Par contre j'aimerai redirigé la personne sur une autre page du genre merci pour votre commande, je n'ai trouvé aucune autre méthode même en javascript cela ne fonctionne plus :/ aurais-tu une solution s'il te plaît ?
    Merci

  9. #9
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    est ce que c'est votre code complet ? je demande cela parce qu'il n'y a pas de vérification d'autorisation donc n'importe qui peut télécharger n'importe quel fichier PDF.
    de plus ce code permet de lire tous les fichiers PDF du serveur. par exemple en envoyant "../../../../../../../../home/utilisateur/codes" dans "dossierInf", il est possible de lire le fichier "/home/utilisateur/codes.pdf".

    pour votre autre question concernant l'affichage du message de commande, il vaut mieux créer une nouvelle discussion une fois que cette discussion est résolue.

  10. #10
    Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Bonjour, non ce n'est pas mon code complet j'ai juste enlevé la partie de vérification du paiement, ce que je cherche maintenant c'est juste à faire la redirection une foise téléchargement effectué, si vous avez une idée merci .

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/02/2011, 14h32
  2. [VB4]Décompresser un seul fichier
    Par Whombat dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 07/03/2006, 02h24
  3. téléchargement forcé, taille du fichier nulle
    Par manaboko dans le forum Langage
    Réponses: 8
    Dernier message: 30/11/2005, 11h45
  4. enregistrer deux fichier dans un seul fichier
    Par Bourak dans le forum Langage
    Réponses: 9
    Dernier message: 05/11/2005, 09h48

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