[PHP] Copier le contenu d'un dossier

SoNNy -  
giheller Messages postés 1882 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Ci dessous un code. Il marche trés bien mais je ne souhaite pas avoir le dossier racine.
La mon problème est que je souhaite copier "uniquement" le contenu du dossier et pas le dossier lui même.


Pouvez vous me dire qu'elle est le problème avec ce code?

 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 'Entrée';
     $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 ("site/destination", "site/contenu_a_copier"); // 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
     ?>
A voir également:

11 réponses

giheller Messages postés 1882 Date d'inscription   Statut Membre Dernière intervention   142
 
bonsoir,

function create_tab ($dir)

cette fonction reçoit en paramètre le contenu du paramètre passé, et elle l'utilise en tant que variable appelée $dir.

il faut donc appeler cette fonction avec le bon paramètre. (soit le dossier désiré)
0
SoNNy
 
Je suis pas sur de comprendre...
Justement il me semble que j'ai mis le bon chemin...

Ce que je souhaite c'est copier uniquement les fichiers et dossiers se trouvant dans le répertoire:
"site/dossier"
0
giheller Messages postés 1882 Date d'inscription   Statut Membre Dernière intervention   142
 
si $dir contient le bon dossier pourquoi, si j'ai bien compris traite-t-il ce qu'il y a à la racine.
cela me semble étrange.

faites un echo du $dir au début de la fonction pour voir si c'est bien le bon dossier.
0
SoNNy
 
non justement à la racine il y a plusieurs dossiers.
il prend le dossier complet et le copie... hors ce que je souhaite c'est simplement qu'il copie le contenu de ce dossier et pas lui avec.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
giheller Messages postés 1882 Date d'inscription   Statut Membre Dernière intervention   142
 
alors il faut copier(son contenu) les fichiers (*.*) pas le dossier.
verifier qu'on est bien dans le bon dossier (qu'il est ouvert)
0
SoNNy
 
C'est exactement ça...
Tous les sous-dossiers et fichiers se trouvant dans celui-ci. mais pas lui.
0
giheller Messages postés 1882 Date d'inscription   Statut Membre Dernière intervention   142
 
si tu regardes la deuxième fonction (copier rep) il semblerait qu'il crée un dossier du même nom avant de copier ce qu'il à mis dans le tableau dans la première fonction).
le script semble bien commenté et c'est ce qu'il dit.

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.
0
SoNNy
 
Oui je suis bien dans le bon dossier... Mais le dossier complet se colle. Je ne trouve pas l'erreur dans le script et cella depuis 6 heures d'affilés dessus Oo.
0
SoNNy
 
Oui j'ai vu ;)
Mais je n'arrive pas à modifier le script pour éviter la copie.

Je vais continuer à chercher ;)
0
SoNNy
 
Je confirme je ne sais définitivement pas le modifier...
encore merci.. Je vais me faire une pause et de nouveau tt esssayer.
0
giheller Messages postés 1882 Date d'inscription   Statut Membre Dernière intervention   142
 
bonsoir
regarde du côté de la variable appelée
$destination
0