Coincé coincé! recherche de fichier dans des dossiers - PHP - Programmation
Marsh Posté le 21-11-2007 à 17:31:19
La recursion est la solution je pense
Marsh Posté le 21-11-2007 à 19:14:41
ReplyMarsh Posté le 21-11-2007 à 19:55:42
C'est lorsque une fonction s'appelle elle même
Exemple algorithmique : http://www.scriptol.org/fibonacci- [...] mation.php
Dans ton cas, il te faut la fonction qui parcours un dossier, et lorsqu'elle en trouve un, elle le parcous en s'appellant elle même.
Bien sûr, penses à mettre en place un systeme de sortie conditionnel, sinon c'est la boucle infinie
Marsh Posté le 21-11-2007 à 20:26:39
ben la condition y est déja,
le script s'appel lui meme dès qu'il trouve un dossier
Marsh Posté le 21-11-2007 à 20:29:11
wais non j'ai regarder ta doc et le pb n'est pas la
hélas :s
il faudrais que je fasse déscendre le curseur dans le dossier parent une foi qu'il est arriver tout en haut...
le pb c'est que meme si je le fait redécendre il reprend la lecture dans le meme ordre, donc ouvre le meme dossier a chaque foi... (et ça une boucle..)
si quelqu'un as une autre idée...
Marsh Posté le 21-11-2007 à 20:59:39
mmmh je sais pas si j'ai été clair.
Mate ca (c un vieux code mais bon) :
Code :
|
La fonction s'appelle "$tree = makeTree ("TON CHEMIN", 0);" et ca te renvois un tableau contenant toute l'arborescence (fichier et sous dossier) à partir de de "TON CHEMIN".
Fait un print_r ($tree) pour voir le résultat.
Adaptes le à ta guise
Marsh Posté le 21-11-2007 à 22:04:06
c clair qu'il as l'ai bocoup plus simple ce script
je l'est tester ça fonctionne!
domage pour mon script! mais la j'en ai trop marre je vais choisir la facilitée^^
merci bien!
Marsh Posté le 22-11-2007 à 00:27:19
pas de soucis, si je devais le refaire maintenant je sais pas si je ferais comme ca mais bon ...
donc hésites pas à le modifier à ta guise
Marsh Posté le 22-11-2007 à 13:13:45
ReplyMarsh Posté le 04-12-2007 à 21:56:14
SICKofitALL a écrit : mmmh je sais pas si j'ai été clair.
|
heu oui, je l'avais modifier,
mais maintenent j'ai besoin vraiment de savoir commence ça marche ses foutu tableaux!
par exemple comment renvoyer juste les nom de fichier trouver genre (comme avec un echo):
-fichier1
-fichier2
-fichier0
et faire :
-fichier1 72k
-fichier2 30k
etc..
et surtout savoir comment les trier par taille.
Si vous avez des exemple sous la main je serais super heureux...
J'aprend beaucoup par des exemple!
merci d'avance a tous!
Marsh Posté le 04-12-2007 à 22:09:25
Ecoute comme dit, tu fais un print_r du tableau retourné et tu as la structure et les infos que tu veux.
A toi ensuite de choper ce quil te faut, exporter ca dans un autre tableau de ton cru, que tu pourras organiser à gros coup de fonction "sort"
sinon en gros :
si c un dossier :
'isdir' est à vrai (TRUE)
'name' est le nom du dossier;
'subtree' pointe vers une autre structure identique contenant un sous-dossier
'size' est le nombre d'éléments dans ce dossier (sous-dossiers + fichiers)
si c'est un fichier :
'isdir' est à FALSE
'name' est le nom du fichier
'size' sa taille en octets
'subtree' est à NULL car il pointe forcément pas vers un sous-dossier
'parentdir' est à null aussi (mais là je constate un bug, il devrait pointer vers le dossier parent et se trouver géré dans le cas des dossiers )
Voilà, il te suffit d'itérer tt ca, avec des foreach par exemple, et pourkoi pas avec des fonctions récursives
Marsh Posté le 04-12-2007 à 22:22:23
mais si je fait "echo $tree['size']"
ça ne me retourne rien!
je suis perdu là :s
vous avez pas un bout de code que je puisse modifier afin de le comprendre?
Genre par exemple tu ferrais comment pour afficher la liste des fichier par poid?
J'ai regarder la doc php mais j'y comprend rien!
Les seuls tableaux (si ça en ai) que je comprend sont les tableaux que je fait avec explode()!
donc merci d'avance d'éclaire ma lenterne
Marsh Posté le 04-12-2007 à 23:28:40
mais je m'exprime mal ou koi ???
Bon reprenons...
Supposons que tu souhaite parcourir cette structure de dossiers (sous windows) :
c:\monDossier
+sous-dossier1
fichierAA
fichierBB
fichierA
fichierB
Pour afficher le résultat, tu utilises ca :
Code :
|
ce qui va te donner :
Code :
|
Tu veux afficher le nombre d'éléments (fichiers + dossiers) trouvés à la racine de ce dossier ?
Code :
|
Tu veux simplement boucler sur ceux-là et afficher leur nom, et aussi la taille qui va avec ?
Code :
|
Tu remarqueras ici que pour "sous-dossier1" il t'affiche 2, car c le nombre d'éléments contenus dans ce sous-dossier, à toi donc de vérifier si tu ne veux afficher QUE les fichiers et leurs taille respectives, que $tree[INDEX]['isdir'] est à FALSE.
Si il est TRUE (à 1 si tu veux), tu peux appeler une fonction (récursive) qui affiche branche par branche, avec en parametres une branche justement de "l'arbre", par exemple :
Code :
|
Ce qiu te donneras ca :
nom : fichierA
nom : fichierB
nom de cette sous-branche :sous-dossier1
nom : fichierAA
nom : fichierBB
J'espère avoir été plus clair
Marsh Posté le 05-12-2007 à 01:09:21
Non tu t'exprime super bien,
grace à toi j'aurrais compris les "fonctions (récursive)" et une partie pour les tableaux.
c'est moi qui est un peut du mal a m'exprimer dans un domaine ou j'ai du mal..
J'ai modifier la function "affBranche ($branche)" pour avoir juste une liste de fichier de type:
nom : fichierA
nom : fichierB
nom : fichierAA
nom : fichierBB
plus la taille^^
mais je voudrais savoir comment faire en sorte que ses fichiers soit trier par taille? du plus lourd au moins lourd?
cad:
nom : fichierA taille 1k
nom : fichierBB taille 2k
nom : fichierAA taille 2,2k
nom : fichierB taille 2,24k
Marsh Posté le 05-12-2007 à 08:06:02
Dans la fonction affBranche que tu as modifiée, au lieu d'afficher le nom des fichiers, place le résultat dans un autre tableau.
Ensuite tri le avec la fonction asort.
De toute facon tu n'as vraiment le choix, tu dois d'abord parcourir tes dossiers, et seulement après travailler le résultat
En fait, regarde du coté des fonctions PHP de tri, certaines te permettent de conserver la structure de ton tableau et de trier par une clé dans celui-ci, ainsi, tu pourras utiliser par exemple un tableau de tri temporaire du style : temp[INDEX][ ['NOM']['TAILLE'] ]
Marsh Posté le 05-12-2007 à 14:04:10
SICKofitALL a écrit : Dans la fonction affBranche que tu as modifiée, au lieu d'afficher le nom des fichiers, place le résultat dans un autre tableau. |
Merci pour ta précieuse aide!
donc j'ai modifier la fonction comme ça:
Code :
|
ça me place qu'un seul fichier trouver dans le tableau lol
Je te remerci de ta patience^^
De fil en aiguille je me retrouve dans un domaine que je ne conaissait pas du tout. surtout les fonctions perso et les tableaux... et je ne sais pas comment demander ça à google...
je suis persuader que c'est le return() de la fonction qui foire non?
Merci Merci d'avance!
Marsh Posté le 05-12-2007 à 14:23:27
Code :
|
EDIT:
je vien de le modifier comme ça mais ça me retourne que le premier dossier...
Marsh Posté le 05-12-2007 à 16:26:11
Code :
|
Le seule truc que j'ai compris c'est que à chaques boucle le tableaux reprend a zéro!
il doit surement il avoir un truc que j'ai zapper
Marsh Posté le 05-12-2007 à 16:31:28
GostSn a écrit :
|
Je crois que l'erreur est dans la première ligne noire.
En gros, il faut que tu considères une fonction récursive comme étant une infinité de fonctions identiques. A chaque fois que la fonction s'appelle, une nouvelle copie avec ses propres variables se met à exister : il n'y a pas de partage inné de variable (que des partages acquis par les paramètres et le return) entre deux appels de la fonction.
Du coup, comme tu ne récupères jamais ce que te retourne la fonction, c'est comme si tu ne l'appellais jamais.
EDIT : J'ai simplement quoter ton code pour pouvoir mettre en gras ton erreur.
Marsh Posté le 05-12-2007 à 19:09:46
affBranche ($branche[$i]['subtree'],$temp2);
rapelle la fonction en fesant suivre la variable $temp2
elle sert a regarder dans les dossier d'un répertoire.(je parle de l'apel de la fonction dans la fonction )
le return serrait pour la derniere valeur de $temp2 qui ai un tableau.
ça marche mais on dirais que au bout d'un moment le tableaux repart à zéro..
c'est ça que je ne comprend pas
Marsh Posté le 21-11-2007 à 16:47:23
Re salut a tous^^
bon ça fait deux jours que je tourne en rond donc voila je me décide a demander votre aide sur un script.
le but est de rechercher certain fichier dans des dossiers et sous dossier
je balance mon code
voici "search_mod.php":
Voila, le script liste tous les fichiers contenant '$search' dans le dossier '$snrep'.
le probleme c'est que le script lit tout en montant jusqu'au dossier le plus haut, mais ne redéscend que d'un seule niveaux a chaque foi!
le pb doit ce trouver ici =>
donc j'ai essayer plusieur méthode mais plus d'idée, la je suis vraiment coincer...
merci de votre aide
Message édité par GostSn le 04-12-2007 à 21:56:35
---------------
http://www.free-tribes.org