Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/12/2006, 07h20   #1
Membre du Club
 
Inscription : février 2006
Messages : 79
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : février 2006
Messages : 79
Points : 44
Points : 44
Envoyer un message via MSN à hkpsyco
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
hkpsyco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2006, 09h21   #2
Fabouney
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
Bonjour,

Citation:
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.
  Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2006, 11h04   #3
Membre du Club
 
Inscription : septembre 2006
Messages : 72
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 72
Points : 55
Points : 55
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.
big_ben3333 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2006, 16h26   #4
Membre du Club
 
Inscription : février 2006
Messages : 79
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : février 2006
Messages : 79
Points : 44
Points : 44
Envoyer un message via MSN à hkpsyco
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
hkpsyco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2006, 17h04   #5
Modérateur
 
Avatar de s.n.a.f.u
 
Homme
Développeur Web
Inscription : août 2006
Messages : 2 700
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : août 2006
Messages : 2 700
Points : 3 357
Points : 3 357
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...
s.n.a.f.u est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2006, 08h40   #6
Fabouney
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
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
  Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2006, 09h25   #7
Modérateur
 
Avatar de s.n.a.f.u
 
Homme
Développeur Web
Inscription : août 2006
Messages : 2 700
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : août 2006
Messages : 2 700
Points : 3 357
Points : 3 357
Oui, mais si ça continue Fabouney, c'est toi qui va vaoir le BTS !
s.n.a.f.u est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2006, 09h29   #8
Membre du Club
 
Inscription : février 2006
Messages : 79
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : février 2006
Messages : 79
Points : 44
Points : 44
Envoyer un message via MSN à hkpsyco
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.
hkpsyco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2006, 09h33   #9
Modérateur
 
Avatar de s.n.a.f.u
 
Homme
Développeur Web
Inscription : août 2006
Messages : 2 700
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : août 2006
Messages : 2 700
Points : 3 357
Points : 3 357
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.
s.n.a.f.u est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2007, 08h40   #10
Membre du Club
 
Inscription : février 2006
Messages : 79
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : février 2006
Messages : 79
Points : 44
Points : 44
Envoyer un message via MSN à hkpsyco
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
hkpsyco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2007, 08h58   #11
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
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
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2007, 10h53   #12
Membre du Club
 
Inscription : février 2006
Messages : 79
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : février 2006
Messages : 79
Points : 44
Points : 44
Envoyer un message via MSN à hkpsyco
Désolé pour le clique-droit, voila je l'ai enlevé.
hkpsyco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2007, 15h08   #13
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
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
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2007, 15h33   #14
Membre éclairé
 
Avatar de Space Cowboy
 
Inscription : avril 2005
Messages : 495
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 495
Points : 306
Points : 306
et ca : http://www.jbc-explorer.com/?action=screenshots ??
Space Cowboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2007, 05h24   #15
Membre du Club
 
Inscription : février 2006
Messages : 79
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : février 2006
Messages : 79
Points : 44
Points : 44
Envoyer un message via MSN à 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 )

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
hkpsyco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2007, 10h16   #16
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
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 :
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
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2007, 10h53   #17
Membre du Club
 
Inscription : février 2006
Messages : 79
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : février 2006
Messages : 79
Points : 44
Points : 44
Envoyer un message via MSN à hkpsyco
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
hkpsyco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2007, 11h40   #18
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
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
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h52.


 
 
 
 
Partenaires

Hébergement Web