copie de repertoire avancé
Posté : 21 nov. 2013, 18:23
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 :
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
?>