Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/10/2006, 15h36   #1
Membre éclairé
 
Avatar de hisy
 
Inscription : novembre 2004
Messages : 373
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 373
Points : 300
Points : 300
Par défaut copie récursive répertoire

Bonjour

Je cherche à faire une copie récursive ( repertoire , ss-repertoire, ss-ss-repertoire ... ) d'un repertoire donné coté serveur dont je connais pas à l'avance la profondeur ...

Merci pour votre aide.
__________________
Take it HiSy
hisy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/10/2006, 15h44   #2
Rédacteur
 
Avatar de BrYs
 
Inscription : octobre 2002
Messages : 2 016
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : octobre 2002
Messages : 2 016
Points : 2 038
Points : 2 038
glob

en utililsant GLOB_ONLYDIR pour récupérer tout tes repertoire

Et ensuite tu fais un glob tu chaque repertoire et tu copie.

Voila.
BrYs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/10/2006, 08h09   #3
Membre éclairé
 
Avatar de hisy
 
Inscription : novembre 2004
Messages : 373
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 373
Points : 300
Points : 300
Bonjour et merci pour cet élément de réponse.

Je ne connaissais pas la fonction glob ...

Mais sauf mauvaise utilisation de ma part elle ne me retourne que les repertoires de premier niveau !!!

Du coup il faut boucler autant de fois qu'il y a de niveaux et je me heurte de nouveau à ma "récursivité à dimension variable" ...

__________________
Take it HiSy
hisy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2007, 15h40   #4
Membre chevronné
 
Avatar de Herode
 
Développeur Web
Inscription : mars 2005
Messages : 773
Détails du profil
Informations personnelles :
Localisation : France, Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mars 2005
Messages : 773
Points : 795
Points : 795
Citation:
Envoyé par hisy
Du coup il faut boucler autant de fois qu'il y a de niveaux et je me heurte de nouveau à ma "récursivité à dimension variable" ...
Soit tu boucles, soit tu fais de la récursion, il est très rare d'avoir à faire les 2

Et pour la récursivité, tu n'as heureusement pas besoin de connaître la profondeur de ton arborescence (en fait, tu n'en as pas besoin non plus si tu fais des boucles : toute procédure récursive est transformable en procédure itérative mais bon, c'est un peu plus lourd en général...)

Bref, sans doute quelque chose d'assez basique comme
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function browseDir( $dir ) {
  $hdir = opendir( $dir );
  while ( $item = readdir( $hdir ) ) {
    if ( is_dir( $item ) ) {
      // Répertoire => récursion
      /*traitements*/
      browseDir( $item );
      /*traitements*/
    }
    else {
       // Fichier => pas de récursion
      /*traitements*/
    } 
  }
  closedir( $hdir );
}
Herode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2007, 08h40   #5
Membre éclairé
 
Avatar de hisy
 
Inscription : novembre 2004
Messages : 373
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 373
Points : 300
Points : 300
Merci à Herode qui m'a fait 99% du taff

J'en suis arrivé à ça :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
class CopieRecursive{
	var $copie;
	function copie( $dir, $dirDest ) {
	   mkdir($dirDest);
	  $hdir = opendir( $dir );
	  while ( $item = readdir( $hdir ) ) {
	  	if($item=="." | $item=="..") continue;
		if ( is_dir( $dir.'/'.$item ) ) {
		  // Répertoire => récursion
		  /*traitements*/
		  $this->copie( $dir.'/'.$item, $dirDest.'/'.$item );
		}
		else {
		   copy($dir.'/'.$item,$dirDest.'/'.$item);
		} 
	  }
	  closedir( $hdir );
	}
}
que J'appelle en faisant :

Code :
1
2
3
 
$CopieRecursive=new CopieRecursive();
$CopieRecursive->copie($sources,$destination);
$sources étant un repertoire...

Et ça marche
__________________
Take it HiSy
hisy est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h59.


 
 
 
 
Partenaires

Hébergement Web