Système d'arborescence en PHP
Résolu
eloyas
-
roptat Messages postés 276 Date d'inscription Statut Membre Dernière intervention -
roptat Messages postés 276 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Bon le titre est assez explicite je trouve ! :)
Je dois faire un système d'arborescence (de fichier/dossier) sur mon navigateur web !!!
Des pistes ? :)
Cordialement.
Bon le titre est assez explicite je trouve ! :)
Je dois faire un système d'arborescence (de fichier/dossier) sur mon navigateur web !!!
Des pistes ? :)
Cordialement.
A voir également:
- Arborescence php
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Arborescence word - Guide
- Alert php ✓ - Forum PHP
- Retour a la ligne php ✓ - Forum PHP
10 réponses
Dans ce cas, utilise une manière qui te permette de construire un arbre facilement. Par exemple, enregistre chaque dossier (ou fichier) avec un id (unique) et l'id de son unique parent (-1 pour la racine) :
te donne :
/
/home
/dev
/home/guest
id (int, auto-increment) parent (int) nom 0 -1 / 1 0 home/ 2 0 dev/ 3 1 guest/
te donne :
/
/home
/dev
/home/guest
Merci de ta réponse. :)
En fait, c'est une arborescence virtuelle que je fais, donc avec une base de données !!! Je ne vois pas en quoi la fonction readdir peux m'être utile !
En fait, c'est une arborescence virtuelle que je fais, donc avec une base de données !!! Je ne vois pas en quoi la fonction readdir peux m'être utile !
Ah, dans ce cas tu peux créer un arbre : https://fr.wikipedia.org/wiki/Arbre_enraciné. Cela dépend de la manière dont tu enregistres les répertoires dans ta base de données. Comment fais-tu ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Je connais les arbres, et je vois ce que tu veux dire ! Comment sont enregistrer mes données dans ma base ? Je ne sais pas encore ! ;)
Cordialement.
Cordialement.
Merci beaucoup pour cette aide ! :)
Je vais me mettre en route pour le faire ! Je te tiens au courant. En attendant, je passe résolu. ;)
Cordialement.
Je vais me mettre en route pour le faire ! Je te tiens au courant. En attendant, je passe résolu. ;)
Cordialement.
Me revoilà ! Je voudrais savoir quelle précaution je dois prendre pour stocker un fichier dans ma BDD, j'ai fais quelque recherche et je vois que pour stocker un fichier en BDD, il faudrais que j'utilise le type longblob, mais quelle précaution prendre pour que le fichier n'endommage pas le serveur !
En ce qui concerne l'arborescence, j'ai bien compris, cependant je bloque sur un point. Je reprend l'exemple de roptat : imaginons que je me situe ici : / . Si je veux me rendre dans le dossier home, je dois faire un select sur ma table et prend tout ce qui a comme parent (int) : parent+1 ? Donc dans mon exemple je fais un truc du genre : SELECT * FROM maTable WHERE parent=parent+1 ? J'ai bien compris ?
Merci d'avance.
Cordialement.
PS : Ou puis-je trouver la FAQ de CCM ?
Ne remets jamais à demain ce que tu peux faire aujourd'hui !
En ce qui concerne l'arborescence, j'ai bien compris, cependant je bloque sur un point. Je reprend l'exemple de roptat : imaginons que je me situe ici : / . Si je veux me rendre dans le dossier home, je dois faire un select sur ma table et prend tout ce qui a comme parent (int) : parent+1 ? Donc dans mon exemple je fais un truc du genre : SELECT * FROM maTable WHERE parent=parent+1 ? J'ai bien compris ?
Merci d'avance.
Cordialement.
PS : Ou puis-je trouver la FAQ de CCM ?
Ne remets jamais à demain ce que tu peux faire aujourd'hui !
pour le ps, tu as trouvé tout seul :)
Pour ta question, dans mon exemple (qui n'est pas forcément adapté à tes besoins, à toi de voir), il faut que tu cherche tous les dossiers dont le parent est l'id de ton dossier.
Par exemple, pour trouver les enfants de /, tu fais
où $id correspond à l'id du parent (0 pour /).
ce qui te renvoie ici les dossiers 1 et 2 (/home/ et /dev/)
si tu veux trouver l'id de /home/, ça devient plus dur... Tu pourrais décomposer le nom en « nom du dossier » et « nom du parent ». (ici « home/ » et « / »). Tu trouves l'id du parent (en refaisant le même algorithme ou en t'arrêtant à la racine (id = 0)). puis tu fais une recherche :
où dans cet exemple $id contient 0 (l'id de « / ») et $nom contient home/ (le nom du dossier).
Pour ce qui est d'enregistrer un fichier dans une bdd, il ne devrait pas y avoir de problème. On évite juste les injections sql (tu peux par exemple utiliser un champ de type text et encoder tout le fichier en base64 (utilisé pour l'envoie de fichier par email)) et les failles xss lors de l'affichage.
Pour ta question, dans mon exemple (qui n'est pas forcément adapté à tes besoins, à toi de voir), il faut que tu cherche tous les dossiers dont le parent est l'id de ton dossier.
Par exemple, pour trouver les enfants de /, tu fais
select * from maTable where parent=$id
où $id correspond à l'id du parent (0 pour /).
ce qui te renvoie ici les dossiers 1 et 2 (/home/ et /dev/)
si tu veux trouver l'id de /home/, ça devient plus dur... Tu pourrais décomposer le nom en « nom du dossier » et « nom du parent ». (ici « home/ » et « / »). Tu trouves l'id du parent (en refaisant le même algorithme ou en t'arrêtant à la racine (id = 0)). puis tu fais une recherche :
select * from maTable where parent=$id and nom=$nom
où dans cet exemple $id contient 0 (l'id de « / ») et $nom contient home/ (le nom du dossier).
Pour ce qui est d'enregistrer un fichier dans une bdd, il ne devrait pas y avoir de problème. On évite juste les injections sql (tu peux par exemple utiliser un champ de type text et encoder tout le fichier en base64 (utilisé pour l'envoie de fichier par email)) et les failles xss lors de l'affichage.
Pour le PS, je cherchais le FAQ de : Comment utiliser le système de post (en gros comment poster un message)
Sinon, ton système me convient tout à fais, cependant, il y a un point sur lequel je ne suis pas d'accord ! Si je reste sur ton exemple, en prenant l'id de / (donc 0), je peux récupérer "l'intérieur" du dossier. Pourquoi sa ne marcherais pas avec le dossier home ?
Le dossier home contient l'id 1, donc si je mets un dossier gest dedans, ce dossier auras comme parent id 1. Donc un select simple doit passer non ?
Ceci : SELECT * FROM maTable WHERE parent=$id
Si je traduis ce code et remplace les variables par leurs valeur, sa voudrais dire :
Sélectionne tout les champs dans la table maTable ou le parent est égal a 1...
Donc sa marche ?
Encore merci.
Cordialement.
Ne remets jamais à demain ce que tu peux faire aujourd'hui !
Sinon, ton système me convient tout à fais, cependant, il y a un point sur lequel je ne suis pas d'accord ! Si je reste sur ton exemple, en prenant l'id de / (donc 0), je peux récupérer "l'intérieur" du dossier. Pourquoi sa ne marcherais pas avec le dossier home ?
Le dossier home contient l'id 1, donc si je mets un dossier gest dedans, ce dossier auras comme parent id 1. Donc un select simple doit passer non ?
Ceci : SELECT * FROM maTable WHERE parent=$id
Si je traduis ce code et remplace les variables par leurs valeur, sa voudrais dire :
Sélectionne tout les champs dans la table maTable ou le parent est égal a 1...
Donc sa marche ?
Encore merci.
Cordialement.
Ne remets jamais à demain ce que tu peux faire aujourd'hui !
oui, c'est ça. Je te fournissais juste une manière de récupérer l'id d'un dossier (ex: l'id du dossier guest dans /home/). Tu as bien compris ce qui se passait :).
SELECT * FROM maTable WHERE parent=$id
récupère bien tous les enfants du dossier dont l'id est $id. (ex: pour $id=0, on récupère /home/ et /dev/)
SELECT * FROM maTable WHERE parent=$id
récupère bien tous les enfants du dossier dont l'id est $id. (ex: pour $id=0, on récupère /home/ et /dev/)