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
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.