Génération récursive d'une arborescence de répertoires

Soyez le premier à donner votre avis sur cette source.

Snippet vu 13 465 fois - Téléchargée 23 fois

Contenu du snippet

Je vous présente une petite fonction récursive que j'ai développée pour permettre de générer l'arborescence de dossiers passée en paramètre sur le serveur. Il vous suffit simplement de lui passer un seul et unique paramètre de type chaîne de caractères. Cette chaîne représente l'arborescence à créer. Exemple : animal/chien/mechant/dobberman

Cette une fonction récursive, donc ça signifie qu'elle s'appelle toute seule. Ainsi cela nous évite d'avoir recours à une boucle pour générer l'arborescence de répertoires. De plus, elle gère les liens symboliques avec ./ ou ../../..

Je pense qu'il y'a moyen de l'améliorer et de l'optimiser, notamment au niveau des regex. N'hésitez pas à me faire savoir les points d'optimisation que vous auriez pu lui apporter.

Source / Exemple :


<?php

/******************************************************************

  • Name : setDirTree()
  • Aim : recursive function which generate a directories tree
*
  • Params : string $_dirTree
  • Return : void
                                                                                                                                    • /
function setDirTree($_dirTree) { // Is parameter null or empty ? if(!empty($_dirTree) && is_string($_dirTree)) { // Check if the root directory exists in the string if(preg_match('`^\.\/[^\.\.\/]`si', $_dirTree)) { // Go to the root directory chdir('.'); // Delete the root element $_dirTree = str_replace('./','',$_dirTree); } // Check if symbolic links exist in the string if(preg_match('`^(\.\/)?[\.\.\/]{1,}`si', $_dirTree, $matches)) { chdir($matches[0]); $_dirTree = str_replace($matches[0],'',$_dirTree); } // Explode the string as an array $path = explode('/', $_dirTree); // Check if the directory exists if(!is_dir($path[0])) { // Create directory mkdir($path[0]); } // Move inside it chdir($path[0]); // Delete the first array entry array_shift($path); // Implode the array as a string $path = implode('/', $path); // Recursive call setDirTree($path); } } setDirTree('./../../animal/chien/mechant/dobberman/'); ?>

Conclusion :


N'hésitez pas à commenter cette source avec des avis constructifs :D

A voir également

Ajouter un commentaire

Commentaires

cs_carate
Messages postés
57
Date d'inscription
mardi 12 décembre 2006
Statut
Membre
Dernière intervention
1 novembre 2007

je suis pas doué en PHP
le code entier ne serait pas de refu !!!

Merci quand même
webdeb
Messages postés
488
Date d'inscription
samedi 5 avril 2003
Statut
Membre
Dernière intervention
31 mars 2009
3
Oui c'est possible. Il suffit de faire le formulaire, de récupérer la valeur avec $_POST['leNomDuForm'] et de placer cette variable en paramètre de la fonction setDirTree().

++
cs_carate
Messages postés
57
Date d'inscription
mardi 12 décembre 2006
Statut
Membre
Dernière intervention
1 novembre 2007

un style de formulaire avec le nom que
le client veux ( ils puissent le remplir , avec un bouton OK
et le répertoire se cré )

Merci beauoup
webdeb
Messages postés
488
Date d'inscription
samedi 5 avril 2003
Statut
Membre
Dernière intervention
31 mars 2009
3
C'est à dire ?
cs_carate
Messages postés
57
Date d'inscription
mardi 12 décembre 2006
Statut
Membre
Dernière intervention
1 novembre 2007

chez moi c'est SUPER TOP FUN
mas je voudrait savoir si il y à moyen que le client puissent
choisir le nom

se serait super merci

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.