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 :

Afficher une image se trouvant hors de la racine web


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 110
    Points : 49
    Points
    49
    Par défaut Afficher une image se trouvant hors de la racine web
    Bonjour,

    Je viens demander conseil suite a quelques interrogations, j'ai lu le tuto sur l'upload de fichier et j'ai pu voir aussi a droite et a gauche qu on pouvait également stocker nos images en dehors de la racine de notre site pour éviter tous problème se que j'ai donc fais, j'ai donc une arborescence ressemblant a ceci :

    ------------=> "image"
    ---www---=> "dossier_mon_site"
    ------------=> "dossier_inclure"

    donc la racine de mon site pointe sur "dossier_mon_site" et je stock mes images dans le dossier "image".
    Le problème est pour l'affichage quand c'est pour l'afficher via readfile donc seulement l'image, aucun code html sur la page, uniquement le code ci-dessous tout marche bien :
    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
     
    <?php try{ $file = 'image.gif';
    	if (file_exists($file)) {
    		ob_clean();
    		flush();
    		header('Content-Description: File Transfer');
    		header('Content-Type: application/octet-stream');
    		header('Content-Disposition: attachment; filename='. $file);
    		header('Expires: 0');
    		header('Cache-Control: max-age=3600, must-revalidate');
    		header('Pragma: public');
    		header('Content-Length: ' . filesize($file));
    		readfile($file);
    		 exit;
    	}
    }catch(Exception $e){echo "error";}  ?>
    Mais j'aimerai pouvoir afficher l'image parmis mon code html et la ca forcement ca ne marche pas si je met le code ci-dessus au milieu de code html.
    Une solution ?

    J'ai pu voir que quelque chose comme ca marchait, je sais pas trop se que ca vaut si c'est plus de la bricole qu'autre chose:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img SRC="data:image/gif;base64,<?php echo base64_encode(file_get_contents('monimage.gif'));?>">
    un avis ?

    et une autre question qui n'a rien a voir mais peut être que quelqu'un pourra faire une pierre deux coups:
    Si je fais pointer un sous domaine sur un dossier se trouvant hors de la racine c'est possible ? genre si je reprends l'arborescence de toute à l'heure:

    ------------=> "dossier_sousdomaine1"
    ------------=> "image"
    ---www---=> "dossier_mon_site"
    ------------=> "dossier_inclure"
    ------------=> "dossier_sousdomaine2"

    est ce possible ? un sous domaine peut se trouver n'importe ou, que ce soit apres ou avant la racine du site ?

    Voilou voilou
    Si quelqu'un peut m'éclairer, ca serait super sympa Merci !

  2. #2
    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
    Tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src="script.php"/>
    Mais bon s'il n'y a aucune gestion d'accès dans le script, à quoi sert tout ça ?

  3. #3
    Membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 110
    Points : 49
    Points
    49
    Par défaut
    Merci d'avoir repondu.

    Effectivement tout simplement ca marche, j'avais essayé de remonté avant la racine comme ca mais sans succes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img SRC="../image/monimage.gif">
    "Mais bon s'il n'y a aucune gestion d'accès dans le script, à quoi sert tout ça ? "

    Je suis désolé je ne comprend pas, en faite je voulais stocker mes fichiers hors de la racine pour plus de sécurité et par exemple dans le fichier ou sont les images mettre un fichier .htaccess pour mettre une liste blanche avec les extensions autorisés.
    peux tu developper un peu sur se que tu appels "gestion d'accès dans le script" ?

  4. #4
    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
    On passe par PHP pour délivrer un fichier lorsqu'il y a besoin d'une gestion des autorisations, par exemple l'utilisation Toto peut obtenir le fichier A mais pas le fichier B, l'utilisateur Titi n'a pas d'accès etc.

    Quelle sécurité cherches-tu à obtenir ?

    Au passage si tu mets tes fichiers en dehors de l'arborescence, tu ne peux pas utiliser un .htaccess.

  5. #5
    Membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 110
    Points : 49
    Points
    49
    Par défaut
    "On passe par PHP pour délivrer un fichier lorsqu'il y a besoin d'une gestion des autorisations, par exemple l'utilisation Toto peut obtenir le fichier A mais pas le fichier B, l'utilisateur Titi n'a pas d'accès etc."

    Ah d'accord, oui en faite si l'utilisateur est connecté et qu'il upload son fichier, une image par exemple il a la possibilité de la mettre en public, donc visible de tous ou en privé, visible par lui même uniquement, j'enregistre le tout dans ma base de donnée, il y a donc un lien unique pour ce fichier et quand un utilisateur va sur ce lien je fais la vérification avant l'affichage savoir si elle est en public ou bien si elle a été mise en privé, que celui qui la uploadé est bien la personne qui est sur cette même page autrement je le redirige.

    "Quelle sécurité cherches-tu à obtenir ?"
    Alors que oui toutes les images ne soient pas visible par tout le monde comme dit au-dessus mais également j'ai pu voir que certain fichier malgré toutes vérifications pouvaient être potentiellement dangereux, comme une image gif contenant du php, et donc les mettres hors de la racine pour éviter que ce code soit exécuté.

    "Au passage si tu mets tes fichiers en dehors de l'arborescence, tu ne peux pas utiliser un .htaccess."
    ah bon avec l'arborescence tel quel ça ne marche pas si je mets mon fichier .htacess dans le dossier image ? sachant qu'il se trouve a la racine du serveur et que je marche avec un hote virtuel, que le nom du site pointe sur le dossier "mon_site"

    -----------=> "dossier_image"
    ---www---=> "mon_site"

  6. #6
    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
    L'idée est soit d'utiliser un contrôle .htaccess pour empêcher la lecture du répertoire depuis le web, soit de mettre le répertoire en dehors de l'arborescence web.
    Mais ça n'apporte rien de mixer les deux : si ton répertoire est en dehors de l'arborescence www mais que tu crées un virtualhost, c'est comme s'il était dans www.

    Je ne sais pas quel est ton type d'hebergement mais ecrire en dehors de l'arborescence web n'est souvent pas possible ; la solution .htaccess est plus facile.

  7. #7
    Membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 110
    Points : 49
    Points
    49
    Par défaut
    "si ton répertoire est en dehors de l'arborescence www mais que tu crées un virtualhost, c'est comme s'il était dans www."

    Je n'ai pas compris la, quand on dit de mettre le repertoire en dehors de l'arborescence,c'est le mettre en dehors de www mais si je suis en virtualhost, je peux le mettre avant www comme apres tant qu'il se trouve avant ou au même niveau que le repertoire ou pointe mon virtualhost, ou alors même avec un virtualhost il faut que mon repertoire fichier se trouve forcement avant le "www" dans tous les cas de figure.

    Merci pour tes réponses.

    J'avais juste une derniere interrogation :
    un sous domaine peut se trouver n'importe ou, que ce soit apres ou avant la racine du site ? forcement apres le www ?

  8. #8
    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
    Le but de mettre un dossier en dehors de l'arborescence web c'est qu'on ne puisse pas accéder à ce répertoire via le serveur web.

    Si tu crées un virtualhost, le repertoire redevient accessible via le serveur web et donc tu es à côté de ton but.

  9. #9
    Membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 110
    Points : 49
    Points
    49
    Par défaut
    Ah bon mais dans les 2 cas suivant on peut pas y acceder a mon dosser image:

    ------------=> "Dossier_Image"
    ---www---=> "Mon_Site (ou pointe mon VirtualHost se qui donnera www.site.com)"
    ------------=> "Dossier_Inclure"

    Ou

    ---"Dossier_Image"---=>--www---=> "Mon_Site (ou pointe mon VirtualHost se qui donnera www.site.com)"
    ------------------------------------=> "dossier_inclure"

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1/ si ton objectif est de "protéger" tes images contre le téléchargement, tu peux déjà laisser tomber.
    A partir du moment où une image est affichée, elle est potentiellement téléchargeable (par récupération de son url dans le code source, par copie d'écran,...).

    2/ c'est quoi ce mic-mac ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img SRC="data:image/gif;base64,<?php echo base64_encode(file_get_contents('monimage.gif'));?>">
    Pour afficher une image, on utilise simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src="images/monimage.gif" alt="" />

  11. #11
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    A partir du moment où une image est affichée, elle est potentiellement téléchargeable
    En fait, techniquement, si elle est affichée, c'est qu'elle a déjà été téléchargée !
    Il suffit d'un petit tour dans le répertoire utilisé pour le cache pour s'en persuader.

  12. #12
    Invité
    Invité(e)
    Par défaut
    Arghh Bovino !!
    Je savais que je devais remplacer le mot "téléchargeable" par "récupérable" !!

    @Royade :
    Juste une question : tes images sont-elles si confidentielles qu'elles valent vraiment toute la peine que tu te donnes ?? *



    * Je pense que cette question est largement optimisable...

  13. #13
    Membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2012
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 110
    Points : 49
    Points
    49
    Par défaut
    "Pour afficher une image, on utilise simplement :"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src="images/monimage.gif" alt="" />
    oui mais cela marche uniquement si l'image est dans l'arborescence du site.

    ------------=> "Dossier_Image"=>"/monimage.gif"
    ---www---=> "Mon_Site (ou pointe mon VirtualHost se qui donnera www.site.com)"
    ------------=> "Dossier_Inclure"

    si je suis a la racine de mon site, ce code ci ne marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src="../Dossier_Image/monimage.gif" alt="" />
    "1/ si ton objectif est de "protéger" tes images contre le téléchargement, tu peux déjà laisser tomber."
    Je l'ai écris plus haut, gestion des autorisations et éviter tout problème (exemple une gif qui peut contenir du code php, si l'image se trouve hors de la racine, impossible de l'executer)

    "2/ c'est quoi ce mic-mac ?"
    La seule facton que j'avais trouvé pour affiché mon image se trouvant en dehors de la racine avant que "sabotage" m'explique la facon de faire.

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/09/2005, 17h20
  2. Afficher une image JPG qui se trouve dans une bdd
    Par Harry dans le forum Bases de données
    Réponses: 6
    Dernier message: 27/02/2004, 10h51
  3. Charger et afficher une image jpg avec les mfc
    Par glop - pas glop dans le forum MFC
    Réponses: 3
    Dernier message: 11/02/2004, 18h59
  4. Réponses: 2
    Dernier message: 04/02/2004, 22h32
  5. Afficher une image sans passer par les textures
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/05/2003, 19h13

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