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 :

Lire un fichier vidéo ou ouvrir un fichier pdf en masquant la source - readfile


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mai 2008
    Messages : 234
    Par défaut Lire un fichier vidéo ou ouvrir un fichier pdf en masquant la source - readfile
    Bonjour à toutes et à tous,

    Je souhaite donner l'accès sur mon site à certaines informations sous réserve que les personnes peuvent y avoir accès (après validation).

    Actuellement je ne sais donner que des liens directs.
    La problématique est donc que sis une personne avec accès communique le lien, tout le monde pourra y avoir accès sans passer par une validation de profil.

    On m'a orienté sur readfile dans une autre conversation.

    J'ai beaucoup de mal à comprendre comment utiliser readfile pour la lecture de ce qui est autre qu'un simple fichier texte.
    De plus, comment je peux "flouter" le lien vers mon fichier avec readfile pour une vidéo ou tout autre chose...
    Lire un texte et l'afficher c'est bien... pour le reste...

    La piste qui m'a été donné est celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <source src="script.php?id_fichier=452" type="video/mp4">
    Cela étant quoi mettre dans ce script afin d'éviter qu'un utilisateur (validé ou non) sache ou se situe le fichier ?
    (Du coup, ce script va contenir un readfile ou plus du tout ?).

    Désolé pour le manque de code, j'aime bien venir avec ce que je fais quand je suis bloqué.
    Mais comme c'est la première fois que je m'attaque à cela... je n'ai clairement aucune idée de ce que je dois/ peux faire pour régler cela.

    D'avance merci pour votre aide.

  2. #2
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 931
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 931
    Par défaut
    Hello,

    Ton script.php va pouvoir contenir un morceau de code qui permet la vérification de l'utilisateur et son droit d'accès. Le cas contraire, une erreur pourra être levée et le fichier non disponible. Ensuite il faut que ton script.php retourne le contenu du fichier à télécharger avec les bonnes entêtes.

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mai 2008
    Messages : 234
    Par défaut
    Bonjour,

    Merci pour ton retour.

    Pour la vérification de l'utilisateur et de ses droits d'accès, cette partie la je peux la gérer en faisant matcher ses id/mdp avec la table relative aux utilisateurs.

    J'ai en revanche une vision très flou pour retourner le contenu du fichier tout en floutant la source de ce fichier.
    La seule chose qui me vient à l'esprit est :

    Utilisateur veut accéder au fichier => Vérifier dans la table X de la BDD s'il peut ou pas.
    S'il ne peut pas => END
    S'il peut alors je lui donne le lien => echo lien; // C'est cette partie là où je ne vois pas du tout comment procéder

    Comment donner une cible sans afficher cette même cible (dans le code de la page) ?

  4. #4
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 931
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 931
    Par défaut
    Tu peux t'appuyer sur ce code de la FAQ :
    https://php.developpez.com/faq/?page..._forcedownload

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mai 2008
    Messages : 234
    Par défaut
    Je te remercie pour ta réponse et ta nouvelle piste.

    Je l'ai parcouru et c'est trop compliqué pour moi.
    Je n'ai aucune idée de comment me servir de ce genre de code, et du coup comment je peux le modifier pour répondre à mon besoin.

    Existe t-il une marche moins haute sur laquelle je peux m'appuyer ?

    D'avance merci.

  6. #6
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 415
    Par défaut
    Citation Envoyé par BOU59000 Voir le message
    Bonjour,

    Merci pour ton retour.

    Pour la vérification de l'utilisateur et de ses droits d'accès, cette partie la je peux la gérer en faisant matcher ses id/mdp avec la table relative aux utilisateurs.

    J'ai en revanche une vision très flou pour retourner le contenu du fichier tout en floutant la source de ce fichier.
    La seule chose qui me vient à l'esprit est :

    Utilisateur veut accéder au fichier => Vérifier dans la table X de la BDD s'il peut ou pas.
    S'il ne peut pas => END
    S'il peut alors je lui donne le lien => echo lien; // C'est cette partie là où je ne vois pas du tout comment procéder

    Comment donner une cible sans afficher cette même cible (dans le code de la page) ?
    Tout dépend des informations que tu veut mettre à disposition des utilisateurs authentifiés.

    Qui dit authentification dit la plupart du temps création d'une variable de session dont tu va tester l'existence dans tous les scripts protégés, donc seuls ceux qui sont authentifiés pourront accéder au contenu de ces pages.

    Maintenant si dans ces pages tu proposes des liens vers certains fichiers, par exemple des fichiers pdf, photos etc. et que tu veux protéger ces fichiers, l'idée est de les mettre dans un répertoire protégé par un ".htaccess" avec la seule mention "deny from all" de sorte que seul php pourra accéder à ces fichiers.

    Donc ensuite

    Si tu veux proposer ces fichiers protégés en téléchargement, tu utiliseras le script php que vient de te donner Bisûnûrs en le complétant par une vérification de l'existence de la variable de session utilisateur.

    ou

    S'il s'agit d'afficher par exemple une photo protégée (inclue dans le répertoire protégé par le ".htaccess) dans une page de l'espace sécurisé, tu devras la lire avec php puisque les liens directs internes via un <a href=...> ou <img src=...>, ou un lien externe via une URL, ne fonctionneront pas.

    Typiquement :

    Code html : 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
    <?php
    session_start();
    /*
    Ici pour l'exemple je défini la variable de session
    Normalement on ne devrait vérifier que son existence puisqu'elle est définie dans le formulaire d'authentification
    */
    $_SESSION['user'] = 1;
    ?>
    <!doctype html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>Document sans nom</title>
    </head>
     
    <body>
    <div>
    toto
    <!-- la source de l'image est l'adresse d'un fichier php avec comme paramètre l'adresse de la photo dans le dossier protégé-->
    <img src="lecture_images.php?file=PHOTOS_PROTECT/ma-photo.jpg">
    titi
    </div>
    </body>
    </html>

    Code du fichier "lecture_images.php"
    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
    <?php
    session_start();
    // Si la variable de session n'est pas définie on sort
    if(!isset($_SESSION['user'])) exit();
     
    // Récupère la variable get file (chemin vers l'image)
    $file = isset($_GET['file'])? $_GET['file'] : null;
     
    // Récupère l'extension
    $extension = isset($file) ? pathinfo($file,PATHINFO_EXTENSION) : null;
     
    // Teste l'extension
    if(!empty($extension)) {
    	$image = true;
    	// On défini le header suivant l'extension en minuscule (pour ne pas avoir à tester les variantes en majuscules)
    	switch (strtolower($extension))
    	{
    		case 'jpg' :
    		case 'jpeg' : header("Content-Type: image/jpeg");
    						break;
    		case 'png' : header("Content-Type: image/png");
    		 				break;
     
    		default : $image = false;
    	}
    	if($image) {
    		readfile($file);
    	}
    }
    // Ce code permettra de lire des images de type jpg, jpeg et png pour les seuls utilisateurs authentifiés par la variable de session $_SESSION['user'] 
    ?>
    Conditions du test : Les deux fichiers ci-dessus ainsi que ton dossier PHOTOS_PROTECT (qui contient le .htaccess avec comme contenu la mention deny from all) sont au même niveau dans l'arborescence de ton répertoire.

    Voilà pourquoi on t'a orienté vers "readfile", car c'est php qui lira les fichiers via cette fonction, soit pour les faire afficher dans ta page comme ci-dessus, soit pour les proposer en téléchargement.

    EDIT: Et fais attention lors des tests, si une variable de session est définie, elle sera persistante tant que tu n'auras pas fermé ton navigateur.

  7. #7
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mai 2008
    Messages : 234
    Par défaut
    Bonjour,

    Merci pour ton retour (et vos retours d'une manière générale).

    Je regardais justement vidéos et pages internet pour progresser un peu la dessus.
    J'ai trouvé une vidéo qui semble expliquer aux débutants les choses.
    Je le regarderai demain avant de revenir sur ce post car je commence à fatiguer.

    Merci pour les explications point par point.
    Je sais que cela vous demande du temps et je m'en excuse.
    J'ai l'impression d'être un enfant qui ne sait pas lire à qui on file un livre en disant, tout est écrit la dedans
    Je sais mais.. je ne sais pas encore lire mais je veux apprendre à lire

    Je vais creuser le côté .htaccess sur ma solution d'hébergement pour sécuriser les fichiers que je veux protéger.

    Je creuse demain cette partie la, et teste cela. Je reviendrai après les tests,

    Merci à tous

  8. #8
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 415
    Par défaut
    Citation Envoyé par BOU59000 Voir le message
    Bonjour,

    J'ai l'impression d'être un enfant qui ne sait pas lire à qui on file un livre en disant, tout est écrit la dedans
    Je sais mais.. je ne sais pas encore lire mais je veux apprendre à lire
    On comprend d'autant plus qu'apparemment tu apprends à lire sur des livres un peu compliqués pour toi pour l'instant. Les problèmes d'authentification, de protections des fichiers et de sécurité en général, cela ne s'aborde généralement que dans un second temps, niveau secondaire à minima. Si tu es en primaire, il te faudrait faire des exercices plus simples pour progresser plus facilement.

    Citation Envoyé par BOU59000 Voir le message
    Je vais creuser le côté .htaccess sur ma solution d'hébergement pour sécuriser les fichiers que je veux protéger.
    Par contre ça c'est assez facile. Dans un fichier vierge tu écris simplement deny fron all et tu sauvegardes ce fichier en l'enregistrant sous le nom ".htaccess". Mais attention le répertoire dans lequel sera enregistré ce fichier deviendra inaccessible via un lien (il suffira de supprimer ce fichier si tu veux rendre ce répertoire de nouveau accessible).

    Bon courage

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment ouvrir et lire des fichiers PDF avec Perl ?
    Par solerian dans le forum Langage
    Réponses: 3
    Dernier message: 04/11/2016, 13h12
  2. [PDF] Ouvrir et lire un fichier pdf qui se trouve sur ma machine
    Par essse dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 08/03/2009, 13h45
  3. [BDS 2006]Lire un fichier PDF
    Par pottiez dans le forum C++Builder
    Réponses: 2
    Dernier message: 24/06/2007, 10h35
  4. [SOLARIS] Lire des fichiers PDF sous SOLARIS
    Par StyleXP dans le forum Solaris
    Réponses: 4
    Dernier message: 15/11/2006, 19h57
  5. [PDF] Lire un fichier PDF
    Par molesqualeux dans le forum Bibliothèques et frameworks
    Réponses: 9
    Dernier message: 24/05/2006, 18h41

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