Copier un repertoire non vide

Bonjour,

Commen copier un repertoire non vide en PHP
Configuration: Windows Vista
Safari 530.5

19 réponses

  1. plusieurs solutions : 1 tu copie ton répertoire principal, 2 tu ouvre ce répertoire et tu boucle en copiant chaque élément présent. copy()

    2 si tu as exec disponible et que ton serveur utilise linux, tu peux tester un exec('cp -r mon_rep nouveau_rep')
    0
    1. je voudrais copier un répertoire dans un autre mais j'ai le message d'erreur siuvant

      Warning: fopen(C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etu/TLC/etudiant00000038): failed to open stream: Permission denied in c:\program files\easyphp1-8\www\mon_projet\pages\valider_inscription.php on line 145

      Warning: copy(C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etu/TLC/etudiant00000038): failed to open stream: Permission denied in c:\program files\easyphp1-8\www\mon_projet\pages\valider_inscription.php on line 149
      fichier non copié


      voici un bout de mon code :
      $source='C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etu/'.$tableau['codefil'].'/'.'etudiant'.$reponse['id'] ;
      $destination='C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etudiants_definitfs/'.$tableau['codefil'];
      if(copy($source, $destination ) )
      0
      1. voici un bout de mon code

        $source='C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etu/'.$tableau['codefil'].'/'.'etudiant'.$reponse['id'] ;
        $destination='C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etudiants_definitfs/'.$tableau['codefil'];
        if(copy($source, $destination ) )
        {/*Start hiding from IE Mac \*/
        /*Stop hiding from IE Mac */

        echo 'fichier copié ' ;
        }
        else
        {

        echo 'fichier non copié ' ;
        }
        0
        1. fopen sert a ouvrire un fichier, non un repertoire
          utilise readdir comme sur l'exemple de la doc :
          <?php

          if ($handle = opendir('/chemin/vers/fichiers')) {
          echo "Directory handle: $handle\n";
          echo "Files:\n";

          /* Ceci est la façon correcte de traverser un dossier. */
          while (false !== ($file = readdir($handle))) {
          echo "$file\n";
          }

          /* Ceci est la MAUVAISE façon de traverser un dossier. */
          while ($file = readdir($handle)) {
          echo "$file\n";
          }

          closedir($handle);
          }
          ?>
          0
          1. donc , dis moi , comment copier mon repertoire alore .
            0
            1. if ($handle = opendir('/chemin/vers/fichiers')) {
              while (false !== ($file = readdir($handle))) {
              copy($file, $destination);
              }
              }
              0
              1. ça ne marche pas , voici le message d'erreur

                Warning: copy(.): failed to open stream: Permission denied in c:\program files\easyphp1-8\www\mon_projet\pages\valider_inscription.php on line 164

                Warning: copy(..): failed to open stream: Permission denied in c:\program files\easyphp1-8\www\mon_projet\pages\valider_inscription.php on line 164

                Warning: copy(emploi_du_temps_personnel.docx): failed to open stream: No such file or directory in c:\program files\easyphp1-8\www\mon_projet\pages\valider_inscription.php on line 164

                Warning: copy(INSCRIPTION DES ETUDIANTS EN LIGN.docx): failed to open stream: No such file or directory in c:\program files\easyphp1-8\www\mon_projet\pages\valider_inscription.php on line 164


                Voici commen j'ai adapté ton code

                voici la source et la destination
                $source='C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etu/'.$tableau['codefil'].'/'.'etudiant'.$reponse['id'] ;
                $destination='C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etudiants_definitfs/'.$tableau['codefil'];

                voici lecode définitif
                If ($handle = opendir($source)) {
                while (false !== ($file = readdir($handle))) {
                copy($file, $destination);
                }
                }
                0
                1. if($handle = opendir($source)) {
                  while (false !== ($file = readdir($handle))) {
                  if(!copy($source.$file, $destination.$file)) {
                  print_r(array($source.$file, $destination.$file));
                  }
                  }
                  }
                  0
                  1. ça ne marche toujours pas , voici le message d'erreur .



                    Warning: copy(C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etu/CIRA/etudiant00000041.): failed to open stream: Permission denied in c:\program files\easyphp1-8\www\mon_projet\pages\valider_inscription.php on line 164
                    Array ( [0] => C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etu/CIRA/etudiant00000041. [1] => C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etudiants_definitfs/CIRA. )

                    Warning: copy(C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etu/CIRA/etudiant00000041..): failed to open stream: Permission denied in c:\program files\easyphp1-8\www\mon_projet\pages\valider_inscription.php on line 164
                    Array ( [0] => C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etu/CIRA/etudiant00000041.. [1] => C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etudiants_definitfs/CIRA.. )

                    Warning: copy(C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etu/CIRA/etudiant00000041extrait_naissance.docx): failed to open stream: No such file or directory in c:\program files\easyphp1-8\www\mon_projet\pages\valider_inscription.php on line 164
                    Array ( [0] => C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etu/CIRA/etudiant00000041extrait_naissance.docx [1] => C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etudiants_definitfs/CIRAextrait_naissance.docx )

                    Warning: copy(C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etu/CIRA/etudiant00000041questions_commerce_electronique.docx): failed to open stream: No such file or directory in c:\program files\easyphp1-8\www\mon_projet\pages\valider_inscription.php on line 164
                    Array ( [0] => C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etu/CIRA/etudiant00000041questions_commerce_electronique.docx [1] => C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etudiants_definitfs/CIRAquestions_commerce_electronique.docx )

                    Warning: copy(C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etu/CIRA/etudiant00000041TELECHARGERBILAN SECRETARIAT A LA COMMUNICATION.docx): failed to open stream: No such file or directory in c:\program files\easyphp1-8\www\mon_projet\pages\valider_inscription.php on line 164
                    Array ( [0] => C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etu/CIRA/etudiant00000041TELECHARGERBILAN SECRETARIAT A LA COMMUNICATION.docx [1] => C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etudiants_definitfs/CIRATELECHARGERBILAN SECRETARIAT A LA COMMUNICATION.docx )

                    0
                    1. If($handle = opendir($source)) {
                      while (false !== ($file = readdir($handle))) {
                      if($file != '.' && $file != '..') {
                      if(!copy($source.$file, $destination.$file)) {
                      print_r(array($source.$file, $destination.$file));
                      }
                      }
                      }
                      }

                      Array ( [0] => C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etu/CIRA/etudiant00000041questions_commerce_electronique.docx [1]

                      es tu sur de tes 2 chemins manque pas un slashes entre /etudiant00000041 et questions_commerce_electronique.docx ?

                      Lie les messages d'erreurs qui sont tres explicites !
                      0
                      1. je viens de les ajouter

                        $source='C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etu/'.$tableau['codefil'].'/'.'etudiant'.$reponse['id'].'/' ;
                        $destination='C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etudiants_definitfs/'.$tableau['codefil'].'/';

                        mais , j'ai toujours ce message :

                        Warning: copy(C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etu/CIRA/etudiant00000041/.): failed to open stream: Permission denied in c:\program files\easyphp1-8\www\mon_projet\pages\valider_inscription.php on line 164
                        Array ( [0] => C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etu/CIRA/etudiant00000041/. [1] => C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etudiants_definitfs/CIRA. )

                        Warning: copy(C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etu/CIRA/etudiant00000041/..): failed to open stream: Permission denied in c:\program files\easyphp1-8\www\mon_projet\pages\valider_inscription.php on line 164
                        Array ( [0] => C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etu/CIRA/etudiant00000041/.. [1] => C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etudiants_definitfs/CIRA.. )

                        Warning: copy(C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etudiants_definitfs/CIRAextrait_naissance.docx): failed to open stream: No such file or directory in c:\program files\easyphp1-8\www\mon_projet\pages\valider_inscription.php on line 164
                        Array ( [0] => C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etu/CIRA/etudiant00000041/extrait_naissance.docx [1] => C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etudiants_definitfs/CIRAextrait_naissance.docx )

                        Warning: copy(C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etudiants_definitfs/CIRAquestions_commerce_electronique.docx): failed to open stream: No such file or directory in c:\program files\easyphp1-8\www\mon_projet\pages\valider_inscription.php on line 164
                        Array ( [0] => C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etu/CIRA/etudiant00000041/questions_commerce_electronique.docx [1] => C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etudiants_definitfs/CIRAquestions_commerce_electronique.docx )

                        Warning: copy(C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etudiants_definitfs/CIRATELECHARGERBILAN SECRETARIAT A LA COMMUNICATION.docx): failed to open stream: No such file or directory in c:\program files\easyphp1-8\www\mon_projet\pages\valider_inscription.php on line 164
                        Array ( [0] => C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etu/CIRA/etudiant00000041/TELECHARGERBILAN SECRETARIAT A LA COMMUNICATION.docx [1] => C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etudiants_definitfs/CIRATELECHARGERBILAN SECRETARIAT A LA COMMUNICATION.docx )
                        0
                        1. tu n'as pas ajouté cette ligne qui t'enlevera les 2 premiers msg d erreur
                          if($file != '.' && $file != '..') {

                          quant à
                          Warning: copy(C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etudiants_definitfs/CIRAextrait_naissance.docx): failed to open stream: No such file or directory in c:\program files\easyphp1-8\www\mon_projet\pages\valider_inscription.php on line 164
                          Array ( [0] => C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etu/CIRA/etudiant00000041/extrait_naissance.docx [1] => C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etudiants_definitfs/CIRAextrait_naissance.docx )

                          failed to open stream: n'arrive pas a ouvrir le flux -> ton path source n'est pas bon
                          0
                          1. je suis sur windows , dois je remplacer / par \
                            0
                            1. non

                              est ce que t aurai pas fait une faute de frappe : definitfs -> definitifs ?
                              0
                              1. je viens de rectifier

                                $source='C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etu/'.$tableau['codefil'].'/'.'etudiant'.$reponse['id'];
                                $destination='C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etudiants_definitifs/'.$tableau['codefil'];

                                mais j'ai toujours

                                Warning: copy(C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etu/2IM/etudiant00000030.): failed to open stream: Permission denied in c:\program files\easyphp1-8\www\mon_projet\pages\valider_inscription.php on line 164
                                Array ( [0] => C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etu/2IM/etudiant00000030. [1] => C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etudiants_definitifs/2IM. )

                                Warning: copy(C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etu/2IM/etudiant00000030..): failed to open stream: Permission denied in c:\program files\easyphp1-8\www\mon_projet\pages\valider_inscription.php on line 164
                                Array ( [0] => C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etu/2IM/etudiant00000030.. [1] => C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etudiants_definitifs/2IM.. )
                                0
                                1. quelle patience....
                                  dans ton code on a fait un test, si la copy ne marche pas affiche moi les chemin complet en source et en destination soit :
                                  Array ( [0] => C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etu/2IM/etudiant00000030. [1] => C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etudiants_definitifs/2IM. )

                                  EST QUE C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etu/2IM/etudiant00000030. existe ? reponse non qu'as tu fait de la condition :
                                  if($file != '.' && $file != '..') { qui permet de ne pas compier ces "faux repertoires" qui ne servent qu'a la navigation
                                  0
                                  1. je peux bien faire une boucle , mais les fihiers ne sont même pas créés
                                    0
                                    1. Voici les chemins

                                      $source='C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etu/'.$tableau['codefil'].'/'.'etudiant'.$reponse['id'].'/';
                                      $destination='C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etudiants_definitifs/'.$tableau['codefil'];
                                      0
                                      1. $source=
                                        'C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etu/'.$tableau['codefil'].'/'.'etudiant'.$reponse['id'].'/';
                                        $destination=
                                        'C:/Program Files/EasyPHP1-8/www/mon_projet/fichiers_etudiants_definitifs/'.$tableau['codefil'];
                                        0