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 :

Mettre en place un système de téléchargement de fichiers "sécurisé"


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 76
    Points : 6
    Points
    6
    Par défaut Mettre en place un système de téléchargement de fichiers "sécurisé"
    Bonjour à tous,

    J'aimerais mettre en place un système sécurisé pour le téléchargement de fichiers appartenant à mes membres.


    Voilà ce que je souhaite faire et ma solution avec (si j'en ai une):

    1ère étape: Le membre uploade un fichier dans un dossier protégé par htaccess (on ne sait jamais).
    Le htaccess est-il "obligatoire"? Vaut-il mieux "planquer" mon dossier où les fichiers atterrissent? Ou quoi que je fasse le dossier est "récupérable"?

    2ème étape: Je stocke la présentation du membre du fichier dans la bdd (donc un coup de insert into).

    3ème étape: Je récupère le fichier, je valide ou non son contenu.

    4ème étape: Partie admin, j'aimerais créer une page automatiquement avec comme nom, le nom du fichier. Ex: monndd.com/nomdufichier. Un peu comme les blogs, qui génèrent une page pour chaque article.
    Je suppose que c'est une question de get, d'url rewriting et de template.
    J'aimerais bien la procédure détaillée, si possible.

    5ème étape: Si un autre membre demande à télécharger le fichier, je génère un lien du fichier par lien symbolique pour protéger le vrai chemin du fichier. Je laisse un accès au lien symbolique quelques jours (un ou deux) pour éviter les abus. (Je cherche aussi un moyen pour vérifier si le membre a vraiment demandé l'accès au fichier).
    A la fin de cette durée, je down le lien symbolique.
    Le lien symbolique est-il une bonne idée? Le but est de cacher le chemin original du fichier dans le dossier htaccess.
    J'ai remarqué que la plupart des sites passe par des sous-domaine pour lancer le téléchargement des fichiers. Est-ce une norme?

    J'ai lu qu'il fallait forcer le téléchargement mais je n'ai jamais trouvé pourquoi faut-il le faire.


    Dans un premier temps, j'aimerais votre avis sur mes idées et/ou des réponses à mes interrogations.
    Dans un second temps, n'hésitez pas à proposer vos idées d'amélioration.

    PS: Je voudrais faire quelque chose de propre et qui respecte les normes actuelles. Je ne suis pas pressé donc proposez vos idées.
    PS': Je ne connais que très peu la gestion de fichiers avec php donc évitez de me donner des réponses de 2 mots

    Merci pour vos réponses

  2. #2
    Membre actif Avatar de Korri
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2008
    Messages : 158
    Points : 232
    Points
    232
    Par défaut
    1ère étape: Le membre uploade un fichier dans un dossier protégé par htaccess (on ne sait jamais).
    Le htaccess est-il "obligatoire"? Vaut-il mieux "planquer" mon dossier où les fichiers atterrissent? Ou quoi que je fasse le dossier est "récupérable"?
    Un .htaccess qui interdit tout accès est suffisant :

    Code .htaccess : Sélectionner tout - Visualiser dans une fenêtre à part
    deny from all

    2ème étape: Je stocke la présentation du membre du fichier dans la bdd (donc un coup de insert into).
    Rien à redire.
    3ème étape: Je récupère le fichier, je valide ou non son contenu.

    4ème étape: Partie admin, j'aimerais créer une page automatiquement avec comme nom, le nom du fichier. Ex: monndd.com/nomdufichier. Un peu comme les blogs, qui génèrent une page pour chaque article.
    Je suppose que c'est une question de get, d'url rewriting et de template.
    J'aimerais bien la procédure détaillée, si possible.
    Pour cette partie je te conseil d'utilise effectivement l'url rewriting, mais ça ne sera au final qu'une surcouche qui redirigera monndd.com/fichiers/nomdufichier (je te conseil de mettre ça dans un sous dossier pour éviter les problèmes), vers monndd.com/mapage.php?fichier=nomdufichier

    Pour l'url rewriting quelque chose du genre devrais fonctionner :
    Code .htaccess : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    RewriteEngine on
     
    RewriteRule ^fichiers/(.*)$ mapage.php.php?fichier=$1 [L]

    Ensuite dans mapage.php tu n'aura plus qu'a vérifier que le fichier existe et à en faire ce que tu veux.

    5ème étape: Si un autre membre demande à télécharger le fichier, je génère un lien du fichier par lien symbolique pour protéger le vrai chemin du fichier. Je laisse un accès au lien symbolique quelques jours (un ou deux) pour éviter les abus. (Je cherche aussi un moyen pour vérifier si le membre a vraiment demandé l'accès au fichier).
    A la fin de cette durée, je down le lien symbolique.
    Le lien symbolique est-il une bonne idée? Le but est de cacher le chemin original du fichier dans le dossier htaccess.
    J'ai remarqué que la plupart des sites passe par des sous-domaine pour lancer le téléchargement des fichiers. Est-ce une norme?

    J'ai lu qu'il fallait forcer le téléchargement mais je n'ai jamais trouvé pourquoi faut-il le faire.
    Pour tes liens, un lien temporaire me parait bon, tu peut aussi simplement autoriser le téléchargement uniquement aux membres autorisés, mais dans tout les cas, tu devras faire passer ton téléchargement par un script PHP.

    Je te conseil d'utiliser encore une fois l'url rewriting, pour rediriger vers un fichiers download.php, fichier qui :
    1. Vérifie que le fichier existe
    2. Vérifie que l'utilisateur à le droit de télécharger le fichier
    3. Transmet le fichier à l'utilisateur


    Le code de cette page dépendra de ce que tu veux faire, test fichiers sont-ils tous du même type ? Si non il faudra détecter le type pour l'envoyer dans le header PHP. Mais en gros quelque chose comme ça devais fonctionner :

    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
     
    // Calcul du chemin du fichier, pense à empêcher les "/" et les ".." dans le nom du fichier sinon un utilisateur mal
    // intentionné pourrais remonter dans les fichiers du système.
    $file = '/chemin/vers/mes/fichiers/' . $_GET['fichier'];
     
    //Vérifier que le fichier existe, idéalement vérifie directement dans ta base de données.
    if(!file_exists($file)) {
        die('Fichier introuvable');
    }
     
    //Vérifie que l'utilisateur possède les droits sur se fichier.
    if(...) {
        die('Vous ne pouvez pas télécharger ce fichier.');
    }
     
    //Si tout s'est bien passé on transmet le fichier
     
    //On force le téléchargement (facultatif, mais permet de sauvegarder directement les images et autres fichiers visionable dans le navigateur, plutôt que de les afficher).
    header('Content-Description: File Transfer');
     
    //On indique le type du fichier, ici un PDF
    header('Content-Type: application/pdf');
     
    //Tu peut aussi donner la taille du fichier pour que le client voie la progression du téléchargement (facultatif)
    header('Content-length: '.filesize($file));
     
    //Le nom du fichier (si tu veux donner un nom différent de celui donné dans le lien).
    header('Content-Disposition: attachment; filename=example.pdf');
     
    //On indique que le fichier est un fichier binaire (sauf si tes fichiers sont des fichiers textes.
    header('Content-Transfer-Encoding: binary');
     
    //Transmission du fichier, cette fonction permet de directement transmettre le fichier avoir à le stoker en ram, très utile pour les gros fichiers.
    readfile($file);
     
    //on ferme le script
    exit;

    Si tu veux plus de détails donne moi plus d'information et je me ferais un plaisir d'éclaircir les points obscures

    PS: Le sous domaine pour les téléchargement n'est pas un standard, c'est ton choix.
    • Quand la discutions est terminée, cliquez sur , Pensez y !
    • Vous voyez un message pertinent et de qualité ? Votez pour ce message !

  3. #3
    Membre habitué
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Décembre 2008
    Messages : 106
    Points : 152
    Points
    152
    Par défaut
    Comme ça a été dit stocker les fichiers dans un dossier protégé par htaccess cest pas mal. Le must étant de les placer dans un dossier hors web, après ça dépend de l'environnement dans lequel tu travailles.

    Pour le chemin du fichier. S'il est stocké dans ta base de données, alors pourquoi pas faire une page du type :

    download.php?file_id=...

    Après tu récupères dynamiquement le nom du fichier, si j'ai bien compris ce que tu voulais faire.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 76
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par Korri Voir le message
    Un .htaccess qui interdit tout accès est suffisant :

    Code .htaccess : Sélectionner tout - Visualiser dans une fenêtre à part
    deny from all
    Donc un .htaccess suffit pour protéger l'intégralité du dossier. Impossible d'accéder au fichier avec le lien direct?



    Citation Envoyé par Korri Voir le message
    Pour cette partie je te conseil d'utilise effectivement l'url rewriting, mais ça ne sera au final qu'une surcouche qui redirigera monndd.com/fichiers/nomdufichier (je te conseil de mettre ça dans un sous dossier pour éviter les problèmes), vers monndd.com/mapage.php?fichier=nomdufichier

    Pour l'url rewriting quelque chose du genre devrais fonctionner :
    Code .htaccess : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    RewriteEngine on
     
    RewriteRule ^fichiers/(.*)$ mapage.php.php?fichier=$1 [L]

    Ensuite dans mapage.php tu n'aura plus qu'a vérifier que le fichier existe et à en faire ce que tu veux.
    Oui, je voulais faire par exemple: monndd.com/php/nomdufichier avec php une catégorie dans la bdd provenant de la présentation du membre. Php peut bien sur varier.
    Je voulais éviter le .php?truc=xxx et n'avoir que "monndd.com/php/nomdufichier " dans l'url.
    Comment faire ça avec le htaccess?



    Citation Envoyé par Korri Voir le message
    Pour tes liens, un lien temporaire me parait bon, tu peut aussi simplement autoriser le téléchargement uniquement aux membres autorisés, mais dans tout les cas, tu devras faire passer ton téléchargement par un script PHP.

    Je te conseil d'utiliser encore une fois l'url rewriting, pour rediriger vers un fichiers download.php, fichier qui :
    1. Vérifie que le fichier existe
    2. Vérifie que l'utilisateur à le droit de télécharger le fichier
    3. Transmet le fichier à l'utilisateur


    Le code de cette page dépendra de ce que tu veux faire, test fichiers sont-ils tous du même type ? Si non il faudra détecter le type pour l'envoyer dans le header PHP. Mais en gros quelque chose comme ça devais fonctionner :

    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
     
    // Calcul du chemin du fichier, pense à empêcher les "/" et les ".." dans le nom du fichier sinon un utilisateur mal
    // intentionné pourrais remonter dans les fichiers du système.
    $file = '/chemin/vers/mes/fichiers/' . $_GET['fichier'];
     
    //Vérifier que le fichier existe, idéalement vérifie directement dans ta base de données.
    if(!file_exists($file)) {
        die('Fichier introuvable');
    }
     
    //Vérifie que l'utilisateur possède les droits sur se fichier.
    if(...) {
        die('Vous ne pouvez pas télécharger ce fichier.');
    }
     
    //Si tout s'est bien passé on transmet le fichier
     
    //On force le téléchargement (facultatif, mais permet de sauvegarder directement les images et autres fichiers visionable dans le navigateur, plutôt que de les afficher).
    header('Content-Description: File Transfer');
     
    //On indique le type du fichier, ici un PDF
    header('Content-Type: application/pdf');
     
    //Tu peut aussi donner la taille du fichier pour que le client voie la progression du téléchargement (facultatif)
    header('Content-length: '.filesize($file));
     
    //Le nom du fichier (si tu veux donner un nom différent de celui donné dans le lien).
    header('Content-Disposition: attachment; filename=example.pdf');
     
    //On indique que le fichier est un fichier binaire (sauf si tes fichiers sont des fichiers textes.
    header('Content-Transfer-Encoding: binary');
     
    //Transmission du fichier, cette fonction permet de directement transmettre le fichier avoir à le stoker en ram, très utile pour les gros fichiers.
    readfile($file);
     
    //on ferme le script
    exit;
    Peux-tu préciser pour ton lien temporaire? Parles-tu d'un lien symbolique (symlink)?
    Je souhaite protéger le lien source et donc si le membre retourne sur la source de téléchargement (clic droit>copier l'adresse d'origine du téléchargement), le lien est directement avec l'extension du fichier donc directement téléchargeable.
    Comment faire pour vérifier si le membre a le droit au lien vu qu'on ne passe pas par une page php avant?
    J'aimerais aussi éviter le "?" dans l'url, voici le chemin que j'aimerais avoir monndd.com/download/hashdunomdufichier(ou autre).


    Citation Envoyé par Korri Voir le message
    PS: Le sous domaine pour les téléchargement n'est pas un standard, c'est ton choix.
    Ok merci j'en prends note.

    Merci pour ton aide

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 76
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par lucas74 Voir le message
    Comme ça a été dit stocker les fichiers dans un dossier protégé par htaccess cest pas mal. Le must étant de les placer dans un dossier hors web, après ça dépend de l'environnement dans lequel tu travailles.

    Pour le chemin du fichier. S'il est stocké dans ta base de données, alors pourquoi pas faire une page du type :

    download.php?file_id=...

    Après tu récupères dynamiquement le nom du fichier, si j'ai bien compris ce que tu voulais faire.
    Hors web? Comment ça?
    Le chemin du fichier n'est pas sauvegardé (je peux toujours essayer de faire ça mais comme je le dis un peu au dessus, je préfère éviter le .php?... et surtout cacher la source).

    Merci pour ta réponse.

  6. #6
    Membre actif Avatar de Korri
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2008
    Messages : 158
    Points : 232
    Points
    232
    Par défaut
    Citation Envoyé par sam1212 Voir le message
    Donc un .htaccess suffit pour protéger l'intégralité du dossier. Impossible d'accéder au fichier avec le lien direct?
    Oui un .htaccess sufit à bloquer tout un dossier, apache ne permettra plus l accès aux fichier de ce dossier et des sous dossiers.

    Citation Envoyé par sam1212 Voir le message
    Oui, je voulais faire par exemple: monndd.com/php/nomdufichier avec php une catégorie dans la bdd provenant de la présentation du membre. Php peut bien sur varier.
    Je voulais éviter le .php?truc=xxx et n'avoir que "monndd.com/php/nomdufichier " dans l'url.
    Comment faire ça avec le htaccess?
    Le fichier .htaccess que je te donnais fait presque ça, le but est juste de réécrire l'url. Tu devrais regarder un cours ça serais le mieux, mais grossierement ça donne ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    RewriteEngine on
     
    RewriteRule ^([a-z0-9]+)/(.*)$ mapage.php.php?category=$1&fichier=$2 [L]
    Citation Envoyé par sam1212 Voir le message
    Peux-tu préciser pour ton lien temporaire? Parles-tu d'un lien symbolique (symlink)?
    Je souhaite protéger le lien source et donc si le membre retourne sur la source de téléchargement (clic droit>copier l'adresse d'origine du téléchargement), le lien est directement avec l'extension du fichier donc directement téléchargeable.
    Comment faire pour vérifier si le membre a le droit au lien vu qu'on ne passe pas par une page php avant?
    J'aimerais aussi éviter le "?" dans l'url, voici le chemin que j'aimerais avoir monndd.com/download/hashdunomdufichier(ou autre).
    Pour le lien il faudra utiliser de l'url-rewriting comme plus haut, parcontre je ne parle pas de symlink qui me parait être une solution assez hasardeuse, je te conseil d'utiliser un script comme je t'ai mis plus haut, qui permet de télécharger ton fichier en passant par un script php et donc de vérifier les droits etc...
    Citation Envoyé par sam1212 Voir le message
    Merci pour ton aide
    Avec plaisir
    • Quand la discutions est terminée, cliquez sur , Pensez y !
    • Vous voyez un message pertinent et de qualité ? Votez pour ce message !

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 76
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par Korri Voir le message
    Oui un .htaccess sufit à bloquer tout un dossier, apache ne permettra plus l accès aux fichier de ce dossier et des sous dossiers.
    Ok donc je vais prendre cette solution.


    Citation Envoyé par Korri Voir le message
    Le fichier .htaccess que je te donnais fait presque ça, le but est juste de réécrire l'url. Tu devrais regarder un cours ça serais le mieux, mais grossierement ça donne ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    RewriteEngine on
     
    RewriteRule ^([a-z0-9]+)/(.*)$ mapage.php.php?category=$1&fichier=$2 [L]
    J'avoue que j'ai du mal avec l'url rewriting. Il faut que je crée une page (mapage.php) pour la présentation des membres et qu'avec, je fasse du get pour récupérer et la catégorie et le nom du fichier.
    Ensuite on réécrit l'url en catégorie/nomdufichier?
    Ne faudrait-il pas faire quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    RewriteEngine on
     
    RewriteRule ^([a-z0-9]+)/(.*)$ mapage.php?category=$1&fichier=$2 /$1/$2 [L]
    Je ne connais pas du tout et je continue à chercher des tutos assez explicites qui ne balance pas 10 lignes toutes faites sans rien expliquer . Je suppose que tu as rajouté un ".php" en trop n'est-ce pas?
    Pour expliquer ce que j'ai essayé de faire et de récupérer $1 qui devient php et $2 le nom du fichier et donc de créer: php/nomdufichier.

    Citation Envoyé par Korri Voir le message
    Pour le lien il faudra utiliser de l'url-rewriting comme plus haut, parcontre je ne parle pas de symlink qui me parait être une solution assez hasardeuse, je te conseil d'utiliser un script comme je t'ai mis plus haut, qui permet de télécharger ton fichier en passant par un script php et donc de vérifier les droits etc...
    Le probleme avec l'url-rewriting sur ce coup là est que le lien n'est pas ni temporaire ni unique.
    Après pourquoi pas utiliser un symlink pour générer un lien de téléchargement et un coup de rewriting pour transformer en /downloads/hash

    Pour le script de téléchargement, j'avais commencé quelque chose comme:

    page download.php avec download.php?mus=truc.wma

    Code : 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
    <?php
     
    if (isset($_GET['mus']))
    {
    $ficname_forc = ($_GET['mus']);
    }
     
    if (isset($ficname_forc)){
    $ficname = $ficname_forc;
    $ext = substr(strrchr($ficname,"."),1);
    header ('content-disposition: attachment; filename ='.$ficname.'');
    header("Content-Type: application/force-download"); 
    switch ($ext){
    case 'wma': header("content-type: audio/mpeg");
    }
    readfile ($ficname);
     
     
    }
     
    else{
    echo "erreur dans le traitement";
     
    }
    ?>
    Bon le test était pour les wma, mon cas sera plus orienté .avi. Ce script peut-il servir pour mon script ou je suis à coté de la plaque?

    Merci.

  8. #8
    Membre actif Avatar de Korri
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2008
    Messages : 158
    Points : 232
    Points
    232
    Par défaut
    Citation Envoyé par sam1212 Voir le message
    Je ne connais pas du tout et je continue à chercher des tutos assez explicites qui ne balance pas 10 lignes toutes faites sans rien expliquer . Je suppose que tu as rajouté un ".php" en trop n'est-ce pas?
    Pour expliquer ce que j'ai essayé de faire et de récupérer $1 qui devient php et $2 le nom du fichier et donc de créer: php/nomdufichier.
    Bien voila t'a tout compris Oui je me suis trompé pour le .php.php :p

    Pour le liens symboliques ça me parait pas nécessaire, il serais plus efficace de stoker les accés en base de donnérs avec une table comme ça par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    id_user, id_fichier, date_fin
    Comme ça tu vérifie simplement que l'utilisateur à bien les droits pour ce fichier et hop c'est bon, pas besoin de faire un lien différent pour chaque personne. Et surtout pas besoin de coder un script qui va aller supprimer tes liens symboliques (tu serais obligé d'utilisé un cron etc...)

    Sans parler du fait que tu pourras garder un trace des accès pour déboguer ou faire des stats.

    Bonne chance
    • Quand la discutions est terminée, cliquez sur , Pensez y !
    • Vous voyez un message pertinent et de qualité ? Votez pour ce message !

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 76
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par Korri Voir le message
    Bien voila t'a tout compris Oui je me suis trompé pour le .php.php :p
    Enfin j'ai compris.... j'ai compris la théorie rien de plus pour l'instant
    Je sens que je vais passer une bonne nuit sur la doc.

    Citation Envoyé par Korri Voir le message
    Pour le liens symboliques ça me parait pas nécessaire, il serais plus efficace de stoker les accés en base de donnérs avec une table comme ça par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    id_user, id_fichier, date_fin
    Comme ça tu vérifie simplement que l'utilisateur à bien les droits pour ce fichier et hop c'est bon, pas besoin de faire un lien différent pour chaque personne. Et surtout pas besoin de coder un script qui va aller supprimer tes liens symboliques (tu serais obligé d'utilisé un cron etc...)

    Sans parler du fait que tu pourras garder un trace des accès pour déboguer ou faire des stats.

    Bonne chance
    J'avais pas vu ça comme ça, c'est une bonne idée! J'etais dans l'esprit de donner un lien unique à chaque membre valide x temps.
    Comment organiser ça?
    Je pensais à rajouter 1 colonne vidéos demandées dans la table membres. Faire un explode et voir ainsi toutes les vidéos demandées.
    Exemple:

    +------------------------------------+
    | pseudo | vidéos demandées |
    +------------------------------------+
    | sam1212 |14 19 85 |
    +------------------------------------+

    Par contre pour date_fin etc..., je ne vois pas comment organiser ça.

    Merci


    PS: Pour le code que j'ai mis, est-ce bon?

  10. #10
    Membre actif Avatar de Korri
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2008
    Messages : 158
    Points : 232
    Points
    232
    Par défaut
    Quand tu à besoin de faire un explode sur un champ de ta base c'est que tu t'y prend mal :p

    Dans ton cas créer un table avec une entrée par utilisateur et par vidéo demandée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    +---------------------------------------+
    |  pseudo | vidéo demandée |  date_fin  |
    +---------------------------------------+
    | sam1212 |        14      | 2011-01-01 |
    +---------------------------------------+
    | sam1212 |        19      | 2011-12-01 |
    +---------------------------------------+
    | sam1212 |        85      | 2012-10-01 |
    +---------------------------------------+
    Si possible (je ne connais pas ta table utilisateur), utilise plutôt l'id de l'utilisateur et pas son pseudo.

    Tu n'aura plus qu'a faire une jolie requete pour vérifier les droits :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT COUNT(*) FROM users_demandes
    WHERE pseudo = 'monpseudo' AND video_demandee = '12' AND date_fin < NOW()
    • Quand la discutions est terminée, cliquez sur , Pensez y !
    • Vous voyez un message pertinent et de qualité ? Votez pour ce message !

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 76
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par Korri Voir le message
    Quand tu à besoin de faire un explode sur un champ de ta base c'est que tu t'y prend mal :p

    Dans ton cas créer un table avec une entrée par utilisateur et par vidéo demandée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    +---------------------------------------+
    |  pseudo | vidéo demandée |  date_fin  |
    +---------------------------------------+
    | sam1212 |        14      | 2011-01-01 |
    +---------------------------------------+
    | sam1212 |        19      | 2011-12-01 |
    +---------------------------------------+
    | sam1212 |        85      | 2012-10-01 |
    +---------------------------------------+
    Si possible (je ne connais pas ta table utilisateur), utilise plutôt l'id de l'utilisateur et pas son pseudo.

    Tu n'aura plus qu'a faire une jolie requete pour vérifier les droits :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT COUNT(*) FROM users_demandes
    WHERE pseudo = 'monpseudo' AND video_demandee = '12' AND date_fin < NOW()
    Oui c'est vrai mais je voulais éviter de faire 50 lignes /membre mais je pense que je vais finalement choisir cette solution sinon c'est trop compliqué à mettre en place.
    Par contre pourquoi as-tu rajouté count dans la requête?

    Merci pour ton aide

  12. #12
    Membre actif Avatar de Korri
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2008
    Messages : 158
    Points : 232
    Points
    232
    Par défaut
    Citation Envoyé par sam1212 Voir le message
    Par contre pourquoi as-tu rajouté count dans la requête?
    Je fait un count comme ça j'ai juste à faire un IF sur le résultat (0 = false, >= 1 = true), mais c'est juste parce que j'aime bien
    • Quand la discutions est terminée, cliquez sur , Pensez y !
    • Vous voyez un message pertinent et de qualité ? Votez pour ce message !

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 76
    Points : 6
    Points
    6
    Par défaut
    Ok
    J'essaye de commencer le script demain et je te tiens au courant
    S'il te vient une idée, n'hésites pas.

    Par contre pour le script tu ne m'as pas répondu

    Merci pour tes réponses.

  14. #14
    Membre actif Avatar de Korri
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2008
    Messages : 158
    Points : 232
    Points
    232
    Par défaut
    Citation Envoyé par sam1212 Voir le message
    Ok
    J'essaye de commencer le script demain et je te tiens au courant
    S'il te vient une idée, n'hésites pas.

    Par contre pour le script tu ne m'as pas répondu

    Merci pour tes réponses.
    C'était quoi la question ?
    • Quand la discutions est terminée, cliquez sur , Pensez y !
    • Vous voyez un message pertinent et de qualité ? Votez pour ce message !

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 76
    Points : 6
    Points
    6
    Par défaut
    Dernière partie du message: http://www.developpez.net/forums/d11...e/#post6155328

    Edit: Est-ce que dans un premier temps dois-je coder en prenant en considération les get dans les url ou dois-je directement faire le htaccess de rewriting?

  16. #16
    Membre actif Avatar de Korri
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2008
    Messages : 158
    Points : 232
    Points
    232
    Par défaut
    Ton script est très bien (d’ailleurs il fait quasiment la même chose que le mien), tu doit juste ajouter ta gestion des droits.

    L'url rewriting c'est juste pour faire jolie, en vrai ton script sera appelé via la syntaxe script.php?a=b (la partie de droite dans la RewriteRule du .htaccess).

    Donc tu code comme si tu n'avais pas d'url rewriting, et tu utilise $_GET.
    • Quand la discutions est terminée, cliquez sur , Pensez y !
    • Vous voyez un message pertinent et de qualité ? Votez pour ce message !

  17. #17
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 76
    Points : 6
    Points
    6
    Par défaut
    Ok merci. J'avais vu des tutos avec énormément de header pour forcer le téléchargement. Je me demandais s'il en manquait.
    J'essaye de commencer le script assez rapidement.

    Merci pour ton aide

  18. #18
    Membre actif Avatar de Korri
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2008
    Messages : 158
    Points : 232
    Points
    232
    Par défaut
    Certains headers supplémentaire peuvent être utiles pour gérer le cache (si tu veux faire télécharger des fichiers différents sur la même URL par exemple, il faut désactiver le cache), mais dans ton cas si tu utilise l'url-rewriting pour réécrire l'adresse et en avoir une par fichier, tu ne devrais pas avoir besoin de plus.
    • Quand la discutions est terminée, cliquez sur , Pensez y !
    • Vous voyez un message pertinent et de qualité ? Votez pour ce message !

  19. #19
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 76
    Points : 6
    Points
    6
    Par défaut
    J'avais bien lu ton message mais je voyais pas trop quoi répondre à part "ok"

    Hier, je suis parti à l'assaut et j'ai commencé à faire les 2 pages.

    Je suis parti sur une page pour télécharger et l'autre pour afficher les pages de présentation.
    Pour télécharger, normalement tu m'as dit que tout était bon, au cas où je remets le code:

    pr_dl.php:

    Code : 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
    <?php
     
    //pr_dl.php?vid=video1.mp4
     
     
    if (isset($_GET['vid']))
    {
    $ficname_forc = 'uploads/'. $_GET['vid'];
    }
     
    if (isset($ficname_forc)){
    $ficname = $ficname_forc;
     
    $ext = substr(strrchr($ficname,"."),1);
    header ('content-disposition: attachment; filename = '.$ficname.'');
    header("Content-Type: application/force-download"); 
    header('Content-length: '.filesize($ficname));
     
     
     
    switch ($ext){
    //case 'wma': header("content-type: audio/mpeg");
    case 'mp4': header("content-type: application/mp4");
    case 'avi': header("content-type: video/msvideo");
    }
    readfile ($ficname);
     
     
    }
     
    else{
    echo "erreur dans le traitement";
     
    }
    ?>
    J'ai un petit soucis, le téléchargement se passe bien mais "uploads_" apparait dans le nom du fichier téléchargé (uploads_video1.mp4). J'ai essayé de modifié le header mais après c'est le téléchargement qui échoue.
    Comment retirer ce "uploads_" du nom du fichier?


    Après pour la création des pages automatiquement, j'ai pensé à un script comme ça:

    Code : 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
    <?php
     
    //?cat=php&titre=comment-faire-ca-en-php
     
     
    if (isset($_GET['cat']) && isset($_GET['titre']))
    {
    echo "ok <br />";
     
    $cat = $_GET['cat'];
    $titre = $_GET['titre'];
     
     
    		mysql_connect("localhost", "root", ""); 
    		mysql_select_db("essai");
     
    		$sql = "select titre, cat from uploads_admin where categorie='$cat'";
    		$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
     
    				$champs = mysql_fetch_assoc($req);
    				$titre_bdd= $champs['titre'];
    				$titre_bddp = str_replace(" ", "-", $titre_bdd);
    				$cat_bdd= $champs['cat'];
     
    //ob_start();
     
    echo "titre de la bdd: ".$titre_bddp. "<br />";
    echo "titre du get: ".$titre;			
     
    if ($titre_bddp == $titre)
    {
    echo "<br />bon titre";
    }
     
    //ob_end_clean();
     
    include "template.php";
    }
     
    else{
    echo "erreur dans le traitement";
     
    }
    ?>
    A vrai dire, je n'ai pas trop réfléchi pour les get et les conditions, c'était juste pour faire quelque chose (pour me lancer).

    Mon template.php:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <html>
    <p> un paragraphe</p>
    Le titre de la page: <?php echo $titre_bdd; ?>
    </html>
    Mon template contient tout le code html pur, je pensais à rajouter les parties qui changent (nom de la page, description etc...) via le php.
    Faut-il donc tout stocker dans la bdd? Ou y'a t-il un moyen plus simple? Ou carrément mon idée est mauvaise pour générer des pages à la volée.

    Merci pour tes réponses

  20. #20
    Membre actif Avatar de Korri
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2008
    Messages : 158
    Points : 232
    Points
    232
    Par défaut
    [quote=sam1212;6162420]J'avais bien lu ton message mais je voyais pas trop quoi répondre à part "ok"

    Hier, je suis parti à l'assaut et j'ai commencé à faire les 2 pages.

    Je suis parti sur une page pour télécharger et l'autre pour afficher les pages de présentation.
    Pour télécharger, normalement tu m'as dit que tout était bon, au cas où je remets le code:

    pr_dl.php:

    Code : 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
    <?php
     
    //pr_dl.php?vid=video1.mp4
     
     
    if (isset($_GET['vid']))
    {
    $ficname_forc = 'uploads/'. $_GET['vid'];
    }
     
    if (isset($ficname_forc)){
    $ficname = $ficname_forc;
     
    $ext = substr(strrchr($ficname,"."),1);
    header ('content-disposition: attachment; filename = '.$ficname.'');
    header("Content-Type: application/force-download"); 
    header('Content-length: '.filesize($ficname));
     
     
     
    switch ($ext){
    //case 'wma': header("content-type: audio/mpeg");
    case 'mp4': header("content-type: application/mp4");
    case 'avi': header("content-type: video/msvideo");
    }
    readfile ($ficname);
     
     
    }
     
    else{
    echo "erreur dans le traitement";
     
    }
    ?>
    J'ai un petit soucis, le téléchargement se passe bien mais "uploads_" apparait dans le nom du fichier téléchargé (uploads_video1.mp4). J'ai essayé de modifié le header mais après c'est le téléchargement qui échoue.
    Comment retirer ce "uploads_" du nom du fichier?

    [/code]
    Pour le nom c'est ligne 15 du code au dessus qu'il faut que tu change le nom.

    Sinon oublie pas de rajouter la partir ou tu vérifie que l'utilisateur à les droits.

    Citation Envoyé par sam1212 Voir le message
    Après pour la création des pages automatiquement, j'ai pensé à un script comme ça:

    Code : 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
    <?php
     
    //?cat=php&titre=comment-faire-ca-en-php
     
     
    if (isset($_GET['cat']) && isset($_GET['titre']))
    {
    echo "ok <br />";
     
    $cat = $_GET['cat'];
    $titre = $_GET['titre'];
     
     
    		mysql_connect("localhost", "root", ""); 
    		mysql_select_db("essai");
     
    		$sql = "select titre, cat from uploads_admin where categorie='$cat'";
    		$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
     
    				$champs = mysql_fetch_assoc($req);
    				$titre_bdd= $champs['titre'];
    				$titre_bddp = str_replace(" ", "-", $titre_bdd);
    				$cat_bdd= $champs['cat'];
     
    //ob_start();
     
    echo "titre de la bdd: ".$titre_bddp. "<br />";
    echo "titre du get: ".$titre;			
     
    if ($titre_bddp == $titre)
    {
    echo "<br />bon titre";
    }
     
    //ob_end_clean();
     
    include "template.php";
    }
     
    else{
    echo "erreur dans le traitement";
     
    }
    ?>
    A vrai dire, je n'ai pas trop réfléchi pour les get et les conditions, c'était juste pour faire quelque chose (pour me lancer).

    Mon template.php:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <html>
    <p> un paragraphe</p>
    Le titre de la page: <?php echo $titre_bdd; ?>
    </html>
    Mon template contient tout le code html pur, je pensais à rajouter les parties qui changent (nom de la page, description etc...) via le php.
    Faut-il donc tout stocker dans la bdd? Ou y'a t-il un moyen plus simple? Ou carrément mon idée est mauvaise pour générer des pages à la volée.

    Merci pour tes réponses

    J'ai pas bien compris la relation entre les pages et le fichier, dans tout les cas si tu veux pouvoir ajouter/modifier des pages sans toucher au code, la BDD il n'y à pas mieux. Par-contre pense à au moins mettre ton code de connexion mysql dans un fichier à part que tu ajoute avec un include.
    • Quand la discutions est terminée, cliquez sur , Pensez y !
    • Vous voyez un message pertinent et de qualité ? Votez pour ce message !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 4 1234 DernièreDernière

Discussions similaires

  1. [CS5] Jeu Bowling - Comment mettre en place un système de parties?
    Par Keden dans le forum ActionScript 3
    Réponses: 0
    Dernier message: 11/12/2010, 16h58
  2. Mettre en place le système de paiement en ligne fini
    Par stanley dans le forum E-Commerce
    Réponses: 1
    Dernier message: 25/04/2009, 22h50
  3. mettre en place un système d'identification
    Par d10g3n dans le forum Apache
    Réponses: 4
    Dernier message: 23/10/2006, 18h27
  4. [MySQL] Comment mettre en place un système de commentaires
    Par mickdu90 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 19/04/2006, 10h48

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