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 :

upload hors racine et lien image


Sujet :

Langage PHP

  1. #1
    Membre averti
    Avatar de antoinev2
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 177
    Points : 376
    Points
    376
    Par défaut upload hors racine et lien image
    Bonjour,

    J'ai un site avec des utilisateurs, qui peuvent uploader un avatar.

    Par sécurité, le dossier dans lequel les images sont placées est situé en-dehors de la racine du serveur web.
    L'upload en lui-même fonctionne.

    Par contre, le lien qui doit afficher l'image ne fonctionne pas sur le serveur (mais fonctionne sous wamp).

    voici l'arborescence à la racine du serveur :

    /
    ----projet_promo
    --------uploads
    ------------avatars
    ----public_html
    --------proj4
    ------------site
    ----------------page_avatar.php

    En fait c'est simple :
    quand l'utilisateur va sur la page nommée "page_avatar.php", son avatar doit être affiché (ainsi qu'un bouton "uploader un avatar").

    voici le lien tel qu'il est dans la page "page_avatar.php" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src="../../../projet_promo/uploads/avatars/avatar_1.jpg" alt="mon avatar" />
    Quand je vais voir le gestionnaire de fichier dans le cpanel, il me dit que le dossier "projet_promo" est de type httpd/unix-directory (permissions 755).
    Idem pour les sous-dossiers "uploads" et "avatars".

    Est-ce que c'est mon lien qui devrait être différent du fait que le dossier soit de type unix? sinon qu'est-ce que ça pourrait être?

  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
    Le serveur web ne peut distribuer que des fichiers qui sont dans son arborescence.

    Tu peux par contre passer par PHP pour aller lire le fichier en dehors.

  3. #3
    Membre averti
    Avatar de antoinev2
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 177
    Points : 376
    Points
    376
    Par défaut
    J'ai mis en place une solution détournée pour le moment :

    un bouton "voir mon avatar actuel"
    sur "onclick", on appelle une fonction JavaScript qui ouvre en popup une page destinée uniquement à afficher un fichier image dans le navigateur (par la fonction readfile)

    Ca fonctionne, la popup est dimensionnée selon l'image donc c'est correct, mais je ne sais pas si c'est à ça que tu pensais?

    L'idéal serait que l'image soit affichée directement dans ma page.

  4. #4
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    à ta place je ferai un truc du genre:
    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
     
    <php
    $stokage = __DIR__."/lendroit/ou/jai/mes/photos";
    function printImage($idImage,$stokage)
    {
    $nomFichier = rechercherImageParIdentifiant($idImage,$stokage);
    afficherEntete($nomFichier);
    readFile($nomFichier);
    exit();
    }
     
    function afficherEntete($nomFichier)
    {
    if ( header_send() )
    {
    throw  new exception("écriture déjà commencée");
    }
    $type=  finfo_file(finfo_open() , $nomFichier);
    if( strpos($type, "image") === false )
    {
    throw new exception ("ce n'est pas une image");
    }
    header("content-type...".$type);
    }
    et tu places ça comme script de téléchargement des images.
    Ce qui n'est pas génial parce que tu ne vas pas mettre en route les dispositifs de cache du navigateur du visiteur mais bon, avec une bonne config de apache, ou en testant bien ta fonction rechercherImageParIdentifianttu as moyen de suffisement bien verouiller le systeme pour qu'il n'y ai pas de probleme.

    Je trouve ton approche limite plus dangereuse parce qu'elle va conduire www-data à avoir des droits d'execution de répertoire et de lecture sur autre chose que /var/www et /home/*/~public/.

  5. #5
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    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 389
    Points : 10 422
    Points
    10 422
    Par défaut
    N'est-ce pas un peu too much comme sécurité ?

    Je veux dire que normalement tu pourrais faire les tests lors de l'upload avec getimagesize complété si besoin par les fonctions que t'a indiquées gene69 pour tester si le fichier est bien une image, et donc être certain que tous les fichiers du répertoire sont bien des images. Dès lors pas de pb de sécurité et tu pourrais faire afficher les images avec un lien standard. Alors qu'avec ta méthode tu mets php à contribution pour afficher les avatars.

  6. #6
    Membre averti
    Avatar de antoinev2
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 177
    Points : 376
    Points
    376
    Par défaut
    ok, je me suis peut-être un peu trop pris la tête, je n'ai pas encore d'expérience et de recul pour juger le niveau de sécurité nécessaire... je vais placer mon répertoire à la racine du serveur web du coup,

    merci pour vos conseils!

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

Discussions similaires

  1. pb de lien hors racine
    Par saxonac dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 04/09/2006, 14h05
  2. question sur les liens images
    Par geoffreykill dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 21/01/2005, 14h37
  3. Lien-image : BUG reconnu de IE 6 ?
    Par protos69 dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 20/01/2005, 16h49
  4. [débutante]Probleme de liens image dans JSP/Servlet
    Par celine31 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 24/11/2004, 15h51

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