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

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

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.