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 :

Arborescence d'un répertoire en PHP


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Février 2006
    Messages : 79
    Points : 66
    Points
    66
    Par défaut Arborescence d'un répertoire en PHP
    Bonjour tout le monde,

    Je termine actuellement ma deuxième de BTS informatique de Gestion option développeur d'applications et le stage de cette année porte sur un assez gros projet (du moins pour moi).

    Je vais donc essayer d'être le plus clair possible :

    Mon stage se déroule chez un expert comptable. Il classe les documents de ses clients dans des répertoires sur son serveur :

    CLIENT A
    ---Année
    ------2002
    ----------A
    --------------fichier1
    --------------fichier2
    ----------B
    ----------C
    ---------- ...
    ------2003
    ------2004
    ------ ...

    Il souhaiterait donc pouvoir gérer cette arborescence depuis un site internet. C'est à dire pouvoir donner accès à un client à tel ou tel dossier, pouvoir mettre à jour les fichiers, de les supprimer etc...

    Son objectif est de proposer à son client un aperçu de ses comptes 24H/24.

    Par la suite il aimerait egalement que ses clients puissent via le site remplir leur document (par exemple pour leurs chèques) puis mettre à jour le document du serveur afin que le comptable puissent consulter les modifications.

    Mon problème est que je ne sais pas comment je vais devoir gérer tout cela... J'ai pensé à parcourir directement les dossiers du serveur mais je ne sais pas comment mettre des restrictions par la suite. J'ai pensé également à faire une arborescence sous Mysql mais là aussi je ne vois pas trop comment m'y prendre.

    J'espère avoir été assez clair Je vous remercie de votre attention.

    Cordialement

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

    J'ai pensé à parcourir directement les dossiers du serveur mais je ne sais pas comment mettre des restrictions par la suite
    y'a ca que je n'ai pas saisi, dans quel but mettre des restrictions ? sur quoi ? les fichiers, les dossiers ?

    sinon en une fonction récursive tu peux faire ce que tu souhaits
    je t'en dirais un peu plus après une fois avoir été éclairci.

    Cordialement.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 72
    Points : 71
    Points
    71
    Par défaut
    Salut,

    Ton projet n'a pas l'air d'être très simple, mais j'ai besoin de plus amples informations pour t'apporter de meilleurs éléments de réponse :

    - De quels types son les documents ?
    - Combien y a t'il de document par client ?
    - Est-ce que le client à besoin du document en brut, ou seulement certaines informations ?
    - Est-ce que les dossiers du serveur sont succeptibles de changer par une autre manière que l'interface web ?

    J'imagine que tu n'a peux être pas le droit de trop t'étendre sur le sujet étant donné qu'il s'agit d'argent...

    3 tables :

    dossiers
    id_dossier INT(10)
    id_parent INT(10) ou niveau INT(10) // à toi de voir si tu en as besoin selon la manière dont tu gères
    chemin TEXT


    utilisateurs_droits
    id_droit INT(10)
    id_utilisateur INT(10)
    lecture ENUM('oui','non')
    ecriture ENUM('oui','non')

    utilisateurs
    id_utilisateur INT(10)
    nom
    prenom
    ....

    A mon sens, à ce que je sais de ton probléme, il s'agirais de scrutter le dossier principal de manière redondante à l'aide de la réccursivité puis de vérifier l'existence du dossier dans une base Mysql et l'ajouter par défaut avec les droits du dossier parent si l'entrée n'existe pas.

    Si ton dossier n'existe plus, il faudrais supprimer l'entrée dans la base.

    Lors de son login, un client aurais une vue sur tous les dossiers parents desquels il a des droits.

    Si l'utilisateur a le droit d'écriture, il faudrais ajouter un formulaire d'upload (faire des vérifications anti-hacking dans le traitement) une fois que l'on se trouve dans le dossier.

    Voila pour ce qui me viens en tête, mais faut pas que je fasse ton boulot non plus... d'autant plus que le mien n'avance pas et que je vais me faire engeuler par le boss .

    En espérant t'avoir aider.

  4. #4
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Février 2006
    Messages : 79
    Points : 66
    Points
    66
    Par défaut
    Pour répondre à vous deux :

    A la base, sur le serveur où est hébergé le site, chaque client possède un dossier. Ensuite le dossier principal du client il y aura d'autre sous-dossier et ainsi de suite (revoir mon premier post pour un aperçu approximatif de l'arborescence).

    Le comptable souhaite cependant pouvoir donner accès uniquement à certains dossier à son client. Par exemple il aura droit uniquement de télécharger les fichiers qui se trouve dans Dossierpermanent>Fiscal->2006-> et les fichiers.

    Il est donc clair que la gestion des autorisations doit se faire via un page admin lol.

    Les fichiers qui circuleront sur le serveur seront surtout des fichiers excel, voir des pdf...

    Il souhaiterait également par la suite pouvoir proposer au client un formulaire qui vendra mettre a jour un fichier excel deja présent sur le serveur.

    J'espère que vous comprenez mieux ce que j'ai à faire... Je sais que c'est pas simple, quand le comptable m'a donné le projet j'ai tout de suite compris que j'allais pas glander.

    En tout cas merci pour vos réponses

  5. #5
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Salut,

    Il faut d'abord architecturer ton appli avant de rentrer dans le code.
    Ton idée est je pense la bonne, mais tu dois la structurer et la consolider avant de te jeter dans le code.
    Pour l'instant pas besoin de php ou autre.
    Et pas de stress non plus, puisque cela semble tout à fait possible :

    - gestion des droits = base MySQL dont tu dois alors concevoir le modèle de données.
    - parcours récursifs des répertoires, c'est un problème classique et extrêment bien documenté.

    Donc tout est faisable, mais avant de t'aider sur le code, il faut vraiment que tu connaisse l'architecture de ton appli. Et ça, c'est toi qui va faire...
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  6. #6
    Fabouney
    Invité(e)
    Par défaut
    moi je procéderais ainsi :

    tu fait une tite interface admin sobre pour ton comptable, tu liste toute l'arborescence de toute les client, devant chaque dossier (voir meme fichier) met une case à cocher (avec une id différente bien entendu) et ton comptable aura plus qu'a choisir l'utilisateur, et cocher les dossiers auquel il pourra accéder, une fois valider,tu stock tout dans une base, et par exemple si l'utilisateur se connecte et souhait consulter l'arborescence, tu affiche que les dossier auquels il a le droit d'accéder, tu peux éventuellement rajouter des options sur les droit en suppression, edition, lecture etc .
    mais moi je ferai quelques chose de similaire


    Cordialement

  7. #7
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Oui, mais si ça continue Fabouney, c'est toi qui va vaoir le BTS !
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  8. #8
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Février 2006
    Messages : 79
    Points : 66
    Points
    66
    Par défaut
    Je réfléchirais un peu plus à ce problème. Donc comme je vois, vous deux vous me proposez de faire une petite base de données sous mysql et ensuite de l'exploiter.

    En tout cas merci pour vos réponses, je chercherai un peu de mon coté niveau analyse etc, puis je reviendrai vous voir plus tard si jamais je bloque sur le code.

  9. #9
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Il existe des solutions encore plus smart à base de RecursiveDirectoryIterator par exemple.
    Un petit coup sur la SPL de donnera une idée des possibilités de cette classe.
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  10. #10
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Février 2006
    Messages : 79
    Points : 66
    Points
    66
    Par défaut
    Rebonjour tout le monde !

    Je suis actuellement en stage et je commence à me reposer des questions sur mon projet !

    j'ai hébergé mon site pour tester sur lycos :

    http://membres.lycos.fr/hkpsyco974/

    util : test
    pass : test

    et vous voyez l'arborescence.

    Mais comment sécuriser tout ça...?
    En effet vous etes normalement dans le dossier du client A. Cependant si dans l'url vous tapper "http://membres.lycos.fr/hkpsyco974/B" vous serez dans le dossier du client B...

    De plus les restrictions peuvent se faire à l'aide d'un chmod. Comment le faire de façon recursive? car chmod('nom_dossier', code) verouille uniquement ce dossier et pas les dossiers fils.

    J'espere que vous pourrez m'éclairer sur ce sujet,

    merci à vous tous par avance

  11. #11
    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
    déjà la protection contre le clic droit ne fait pas professionel et en plus on peux la contourner déjà enlève la si tu veux qu'on regarde ton problème

  12. #12
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Février 2006
    Messages : 79
    Points : 66
    Points
    66
    Par défaut
    Désolé pour le clique-droit, voila je l'ai enlevé.

  13. #13
    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
    n'utilise pas les droits avec chmod puisque tu as déjà tes droits dans une table

    en fait dans la page encrypt.php tu dois chercher dans la base de données toutes les conditions qui font que la personne ait accès en fonction du chemin ou elle se trouve
    tu devras surement faire une boucle en suivant le parent dans la table

  14. #14
    Membre averti Avatar de Space Cowboy
    Homme Profil pro
    chomeur
    Inscrit en
    Avril 2005
    Messages
    496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : chomeur

    Informations forums :
    Inscription : Avril 2005
    Messages : 496
    Points : 401
    Points
    401

  15. #15
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Février 2006
    Messages : 79
    Points : 66
    Points
    66
    Par défaut
    Je suis d'accord avec toi, mais je n'arrive pas à faire le rapprochement entre les droits qui sont stockés dans une table et les droits d'accès au dossier du serveur distant.

    J'avais commencé justement à mettre des droits dans une table, mais la seule utilisation que j'ai fait pour le moment c'est d'afficher le dossier ou pas et je ne vois pas ce que je peux faire d'autre avec droits d'accès dans une table. (Le dossier étant juste caché, le problème est simplement contourné mais un client un peu mal intentionné comprendrait vite le manège )

    Que penses-tu si je mets un .htaccess avant les dossiers clients? Au moins personne pourra naviguer dans le dossier via l'URL. Cependant le problème qui se pose sera lors des téléchargements des fichiers, qui seront bloqués vu que le dossier parent est lui vérouillé par le .htaccess.
    Maintenant peut-être qu'il y a une solution pour contourner ce problème de téléchargement en php mais là je sèche

    Cordialement

  16. #16
    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
    Citation Envoyé par hkpsyco
    Je suis d'accord avec toi, mais je n'arrive pas à faire le rapprochement entre les droits qui sont stockés dans une table et les droits d'accès au dossier du serveur distant.

    J'avais commencé justement à mettre des droits dans une table, mais la seule utilisation que j'ai fait pour le moment c'est d'afficher le dossier ou pas et je ne vois pas ce que je peux faire d'autre avec droits d'accès dans une table. (Le dossier étant juste caché, le problème est simplement contourné mais un client un peu mal intentionné comprendrait vite le manège )
    pour savoir quel répertoire lire je suppose que tu lis le contenu de la variable $_POST['ch'] ?
    si c'est ça, avant de lire le répertoire, tu découpes cette variable suivant le caractère "\" avec la fonction explode. et ensuite pour chaque élément tu cherches les droits dans la base de données

    d'ailleurs tu ne testes pas correctement le contenu de cette variable $_POST['ch']. Connecte toi et ensuite mets le code suivant dans un fichier html et clique sur le bouton, tu auras une surprise :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <form action="http://membres.lycos.fr/hkpsyco974/encrypt.php" method="post">
    	<input name="rep" value="/data/members/free/multimania/fr/h/k/p/hkpsyco974/htdocs/" type="hidden">
    	<input name="ch" value="/hkpsyco974/" type="hidden">
    	<input type="submit">
    </form>


    Citation Envoyé par hkpsyco
    Que penses-tu si je mets un .htaccess avant les dossiers clients? Au moins personne pourra naviguer dans le dossier via l'URL. Cependant le problème qui se pose sera lors des téléchargements des fichiers, qui seront bloqués vu que le dossier parent est lui vérouillé par le .htaccess.
    Maintenant peut-être qu'il y a une solution pour contourner ce problème de téléchargement en php mais là je sèche
    oui c'est ce qu'il faut faire, empêcher la navigation directe dans le dossier et enuite tu filtre le téléchargement en PHP avec le code suivant :
    http://php.developpez.com/faq/?page=..._forcedownload

  17. #17
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Février 2006
    Messages : 79
    Points : 66
    Points
    66
    Par défaut
    Si tu as trouvé des erreurs dans le parcours de l'arborescence c'est normal car je suis en trin de le modifier depuis ce matin pour faire des tests.

    Je vais étudier le lien que tu m'as donné, j'espère que ça fera l'affaire concernant les téléchargements.

    Ce qu'il me reste à faire :
    - Pouvoir mettre les droits sur les dossiers via un formulaire php.
    (Comme tous les clients auront les mêmes dossiers, il suffit d'appliquer les mêmes droits à tout le monde car si un client n'a pas droit un dossier l'autre client n'aura lui aussi pas droit).

    - Forcer les téléchargements. Que penses-tu de faire déplacer le fichier a télécharger dans un dossier temporaire pour contourner le .htaccess. Lorsque le fichier est télécharger on le supprime?

    En tout cas merci pour tes réponses, ça me rassure énormément sur mon projet, je constate que j'avance quand même dans la bonne direction

    Cordialement

  18. #18
    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
    Citation Envoyé par hkpsyco
    - Forcer les téléchargements. Que penses-tu de faire déplacer le fichier a télécharger dans un dossier temporaire pour contourner le .htaccess. Lorsque le fichier est télécharger on le supprime?
    non ce n'est pas ça. Le code PHP de la FAQ lis simplement le fichier à l'endroit où il se trouve et le propose en téléchargement au visiteur

Discussions similaires

  1. Arborescence d'un répertoire.
    Par I'mSky dans le forum Langage
    Réponses: 3
    Dernier message: 27/10/2011, 17h00
  2. monter répertoire en PHP
    Par sacan dans le forum Langage
    Réponses: 1
    Dernier message: 28/02/2011, 17h21
  3. [PHP 5.3] Interdire de reculer de répertoire en PHP
    Par filoozom dans le forum Langage
    Réponses: 3
    Dernier message: 20/11/2009, 11h53
  4. lister les documents d'un répertoire en php
    Par Shyboy dans le forum Langage
    Réponses: 1
    Dernier message: 27/03/2007, 20h29
  5. Lecture des répertoires et sous répertoire en php
    Par BRAUKRIS dans le forum Langage
    Réponses: 1
    Dernier message: 30/03/2006, 17h27

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