[PHP] Copier le contenu d'un dossier

SoNNy -  
giheller Messages postés 1892 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
     ?>
Configuration: Windows 7
Firefox 3.5.7

11 réponses

  1. giheller Messages postés 1892 Date d'inscription   Statut Membre Dernière intervention   146
     
    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
  2. 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
  3. giheller Messages postés 1892 Date d'inscription   Statut Membre Dernière intervention   146
     
    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
  4. 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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. giheller Messages postés 1892 Date d'inscription   Statut Membre Dernière intervention   146
     
    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
  7. SoNNy
     
    C'est exactement ça...
    Tous les sous-dossiers et fichiers se trouvant dans celui-ci. mais pas lui.
    0
  8. giheller Messages postés 1892 Date d'inscription   Statut Membre Dernière intervention   146
     
    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
  9. 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
  10. SoNNy
     
    Oui j'ai vu ;)
    Mais je n'arrive pas à modifier le script pour éviter la copie.

    Je vais continuer à chercher ;)
    0
  11. 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
  12. giheller Messages postés 1892 Date d'inscription   Statut Membre Dernière intervention   146
     
    bonsoir
    regarde du côté de la variable appelée
    $destination
    0