Page 1 sur 1

copie de repertoire avancé

Posté : 21 nov. 2013, 18:23
par neomega
bonjour,

je vien de tester ce script qui fonctionne bien mais il me manque quelque fonction a lui ajouter


je souhaiterai que si dans le répertoire de destination le dossier que j'essaye de copier existe ils fusionne

et je souhaiterais copier plusieurs repertoire a la fois , ya t'il un moyen pour eviter de copier la fonction

exemple

repertoire "base" contien -> repertoire1 , repertoire2 , repertoire3

repertoire1 -> plein de repertoire
repertoire2 -> plein de repertoire
repertoire3 -> plein de repertoire

/////////////////////////////////

le repertoire "destination" contien deja le dossier repertoire1 mais ne contien pas tout ses sous repertoire " c'est pour cela que souhaite un fusion "

si fusion pas possible

je souhaiterai nomé manuellement tout les repertoire contenue dans repertoire1 pour la copie


script qui fonctionne mais ne fusionne pas :
<?php
                                       
function create_tab ($dir) { // fonction creant le tableau contenant les repertoires et fichiers
    $dir = rtrim ($dir, '/'); // on vire un eventuel slash mis par l'utilisateur de la fonction a droite du repertoire
		if (is_dir ($dir)) // si c'est un repertoire
			$dh = opendir ($dir); // on l'ouvre
		else {
			echo $dir, ' n\'est pas un repertoire valide'; // sinon on sort! Appel de fonction non valide
			exit;
			}
		while (($file = readdir ($dh)) !== false ) { //boucle pour parcourir le repertoire 
			if ($file !== '.' && $file !== '..') { // no comment
				$path =$dir.'/'.$file; // construction d'un joli chemin...
				if (is_dir ($path)) { //si on tombe sur un sous-repertoire 
					$tableau[$dir]['dir'][] = $path;
					$tabTmp = create_tab ($path); // appel recursif pour lire a l'interieur de ce sous-repertoire
					if (is_array ($tabTmp) && is_array ($tableau))
						$tableau = array_merge ($tableau, $tabTmp);
				}
				else
					$tableau[$dir]['file'][] = $path;
			}
		}
		closedir ($dh); // on ferme le repertoire courant
		if (isset ($tableau)) {
            return $tableau;
        }
	}

function copier_rep ($destination, $reps, $tableau_dir = array ()) { // fonction pour copier repertoire : on cree un repertoire de meme nom, puis on va chercher les fichiers, et on les copie. Si il y a des sous repertoires, appel recursif.
		if (empty ($tableau_dir)) {
			echo 'copie reussi';
			$tableau_dir = create_tab ($reps);
		}
		if (!is_array ($reps)) {
			$reps = array ($reps);
		}
		foreach ($reps as $rep) {
			if (!is_dir ($destination.'/'.basename ($rep))) {
				mkdir ($destination.'/'.basename ($rep));
				if (!empty ($tableau_dir[$rep]['file']) && isset($tableau_dir[$rep]['file']) && is_array ($tableau_dir[$rep]['file'])) {
					foreach ($tableau_dir[$rep]['file'] as $fichier) {
						copy ($fichier, $destination.'/'.basename ($rep).'/'.basename ($fichier));
					}
				}
				if (!empty ($tableau_dir[$rep]['dir']) && isset ($tableau_dir[$rep]['dir']) && is_array ($tableau_dir[$rep]['dir'])) {
					copier_rep ($destination.'/'.basename ($rep), $tableau_dir[$rep]['dir'], $tableau_dir);
				}
			}
		}
	}
	

copier_rep ('./destination/', './repertoire1'); // 1er paramètre : le répertoire de destination sous forme d'une chaine - 2d paramètre : le répertoire à copier sous forme d'une chaine ou d'un tableau 

?>
	

Re: copie de repertoire avancé

Posté : 22 nov. 2013, 10:36
par Mazarini
Pour copier plusieurs répertoire, il suffit d'appeler plusieurs fois la fonction copier_rep. Il n'y a pas à se poser plus de questions.

Pour les répertoires qui existe déjà, il faut continuer à les créer s'il n'existe pas, mais exclure du test de non existence la copie.

Re: copie de repertoire avancé

Posté : 23 nov. 2013, 11:34
par neomega
merci pour cette réponse mais malheureusement je ne sais pas comment faire
Pour les répertoires qui existe déjà, il faut continuer à les créer s'il n'existe pas, mais exclure du test de non existence la copie.
pouvais vous m'aider svp ?

Re: copie de repertoire avancé

Posté : 24 nov. 2013, 20:34
par neomega
up

svp