begin process at 2012 02 15 22:08:09
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichier / Disque

 > GÉNÉRATION RÉCURSIVE D'UNE ARBORESCENCE DE RÉPERTOIRES

GÉNÉRATION RÉCURSIVE D'UNE ARBORESCENCE DE RÉPERTOIRES


 Information sur la source

Note :
Aucune note
Catégorie :Fichier / Disque Classé sous :récursivité, arborescence, répertoire, dossier, génération Niveau :Initié Date de création :22/01/2007 Date de mise à jour :22/01/2007 20:11:50 Vu :11 817

Auteur : webdeb

Ecrire un message privé
Site perso
Commentaire sur cette source (13)
Ajouter un commentaire et/ou une note

 Description

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

  • <?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/');
  • ?>
<?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


 Historique

22 janvier 2007 20:11:50 :
Echappements des caractères particuliers des regex (point et slash)

 Sources du même auteur

Source avec Zip [PHP5][CLASSE] GÉNÉRATION DE FLUX RSS 2.0
Source avec Zip Source avec une capture [POO] PHP5 ATOM GENERATOR V1.0
Source avec Zip WD_RSS_GENERATOR
Source avec Zip Source avec une capture WD_SHOOTBOX_V3
UPLOAD IMAGES SECURISE

 Sources de la même categorie

UPLOADER DES FICHIER DANSUN DOSSIER, SÉCURISÉ AVEC MOT DE PA... par raizzo
COMPTEUR DE VISITES SUR FICHIER par pierreSabatier
FONCTION RECURSIVE DE DOSSIERS par tefa24600
Source avec Zip CONVERSION DES UNITÉS INFORMATIQUE (O, KIO, MIO, GIO, TIO...... par genetApt151
TROUVER LES DOUBLONS DANS UNE LISTE DE FICHIERS par soobook

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture FONCTION RÉCURSIVE POUR GÉNÉRER UNE ARBORESCENCE DE FICHIERS... par caviar
PARCOURIR UN RÉPERTOIRE ET SES SOUS SOUS SOUS... RÉPERTOIRE ... par micmonay
Source avec Zip Source avec une capture EXPLORATEUR DE DOSSIERS RÉCURSIF par nikoland
Source avec Zip GALLERIE D'IMAGE CONSTRUITE PAR APPELS RÉCURSIFS DANS UN RÉP... par satanik_mike
SUPPRIMER 1 U PLUSIEURS RÉPERTOIRES ET TOUT CE QU'IL Y A DED... par malalam

Commentaires et avis

Commentaire de coucou747 le 23/01/2007 12:42:13 administrateur CS

aucun return, aucun echo ?

Commentaire de webdeb le 23/01/2007 14:31:44

Pourquoi veux-tu un return ou un echo ?

Commentaire de viking_force le 01/02/2007 10:08:03

bonjour....

Je pense que dans un premier temps il est utile d'indiquer qu'il ne s'agis pas de la représentation graphique (ou textuelle) d'une arborescence, mais la création des dossiers et sous dossiers sur le serveur...... (n'est ce pas coucou ^^)

Ceci dis je n'ai vraiment rien trouver qui ne va pas dans ton script...sauf que j'en vois pas trop l'utilité, m'enfin bon :-)
faudrais faire le meme script mais pour effacer une arborescence de répertoir...


Ha si juste un p'tit truc (qui mange pas de pain comme on dis..) tu pourrais faire une petite verification sur $path voir s'il lui reste quelque chose histoire de ne pas appeler la fonction une derniere fois en passant une chaine vide en argument.....


sinon une petite dernière chose.....pourquoi ne pas mettre les commentaire en français ?

Commentaire de webdeb le 01/02/2007 13:58:20

>> Ceci dis je n'ai vraiment rien trouver qui ne va pas dans ton script...sauf que j'en vois pas trop l'utilité, m'enfin bon :-)

L'utilité était d'abord pour moi dans le cadre de mon projet d'IUT. J'avais besoin de générer automatiquement une arborescence de dossiers et de sous-dossiers facilement.

>> faudrais faire le meme script mais pour effacer une arborescence de répertoir...

Wai j'y ai pensé. Si j'ai le temps et surtout le besoin d'une telle fonction, je me pencherai dessus.

>> tu pourrais faire une petite verification sur $path voir s'il lui reste quelque chose histoire de ne pas appeler la fonction une derniere fois en passant une chaine vide en argument.....

wai pourquoi pas, je vais regarder ça :) Merci pour l'idée.

>> sinon une petite dernière chose.....pourquoi ne pas mettre les commentaire en français ?

Une question de principe pour moi. Je veux rendre mon script plus facilement compréhensible pour une majorité de développeurs. C'est un choix personnel :)

++

Commentaire de garfield90 le 01/02/2007 16:05:16

Fonction mkdir :

bool mkdir ( string pathname [, int mode [, bool recursive [, resource context]]] )
mkdir() tente de créer un dossier dans le chemin pathname.

le 3 parametre optionnel permet de faire la récursivité par contre, je ne sais plus si ca fonctionne avec les chemins relatives, la flemme de faire le test.

Commentaire de webdeb le 01/02/2007 16:23:11

Ah wai en effet, je n'avais pas fait gaffe. Je n'ai pas testé cette solution mais d'après les notes sur la doc ça ne marche pas si bien que ça. De plus, ce paramètre a été introduit dans la version 5 de PHP donc ça ne marchera pas avec les hébergeurs qui restent réfractaires au passage sur la version 4.

Avec ma procédure, ça fonctionnera sur toutes les versions de PHP.

Commentaire de ablakeway le 01/03/2007 17:47:30

Le doberman n'est pas un chien méchant. Seuls les chiens de cette race dressés à être aggressifs le deviennent.
A part ça, je trouve ton exemple de code intéressant (d'un point de vue didactitiel)

Commentaire de webdeb le 01/03/2007 18:41:19

Merci pour ton commentaire :)

Commentaire de carate le 05/05/2007 09:30:31

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

Commentaire de webdeb le 05/05/2007 12:59:58

C'est à dire ?

Commentaire de carate le 05/05/2007 13:12:27

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

Commentaire de webdeb le 05/05/2007 13:25:18

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

++

Commentaire de carate le 05/05/2007 14:18:49

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

            Merci quand même

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

pb de recuperation du nom d'un dossier ds une arborescence [ par dryad of the wood ] salut a tous! J'aimerai savoir comment je pourrai recuperer le nom d'un dossier dans une arborescence pour le reutiliser dans une variable... Voila, s redirection d'un répertoire vers ssl [ par titeuf974 ] Bonjour,Je souhaiterai rediriger les pages d'un r&#233;pertoire vers les protocle ssl. Pour cela. j'utilise un htaccess : Redirect /dossier_a_redirige arborescence ... [ par chamallow ] Bonjour Une petite question bete !Est-il possible de remonter dans l'arborescence plus haut que le localhost?Par exemple, si  je test un futur intrane Verifier si un répertoire est présent sur le server [ par thedjpredator ] Bonjour,Jai un petit problème jai réalisé un petit système de navigation entre répertoiresde mon site du style :/dossier1//dossier2//dossier3/...Avec creer un répertoire dans un répertoire [ par mouloudikhaled ] Bonjour a tous, S'il vous plait. j'essaye de crée un dossier dans un dossier mais je n'y arrive pas. Pouvez vous me dire comment dois-je procédé ? Mer Nom du répertoire courant (sans l'arborescence) [ par Willis ] Bonjour,Je n'arrive ::: Arborescence dossier en php ::: HELP ME PLEASE [ par abdelmetz ] D&#233;j&#224; merci d'avance pour votre soutiens, &#231;a fais 2 jours que je gal&#232;re la dessus...J'ai &#233;cris listing des fichiers et dossier arborescence de repertoire et sous répertoire avec galerie d'image [ par bladehelsing ] Bonjours à tous,après avoir essayer tous les codes arborescence avec galerie d'image.j'en ai trouvé aucun qui:affiche d'abord les répertoires qui seul ftp_put qui plante ??!! bizarre .... [ par chamallow ] Rebonjour encore et encore :)Bon ben j'ai encore des problèmes mais là je trouve que c'est bizarre et même l'admin a pas compris!Bon alors je me conne Image d'un dossier avec affichage spécial ! [ par craft2005 ] Bonjour à tous !Je suis à la recherche d'un code qui ne me semble pas très complexe, mais que je suis incapable de faire sans me taper la tête sur le


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,134 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales