2012-03-23 2 views
8

Je souhaite déplacer tous les fichiers et dossiers d'un dossier vers un autre dossier. J'ai trouvé un code pour copier tous les fichiers dans un dossier vers un autre dossier. move all files in a folder to anotherdéplacer tous les fichiers et dossiers dans un dossier à un autre?

// Get array of all source files 
$files = scandir("source"); 
// Identify directories 
$source = "source/"; 
$destination = "destination/"; 
// Cycle through all source files 
foreach ($files as $file) { 
    if (in_array($file, array(".",".."))) continue; 
    // If we copied this successfully, mark it for deletion 
    if (copy($source.$file, $destination.$file)) { 
    $delete[] = $source.$file; 
    } 
} 
// Delete all successfully-copied files 
foreach ($delete as $file) { 
    unlink($file); 
} 

Comment puis-je changer cela pour déplacer tous les dossiers et fichiers dans ce dossier dans un autre dossier.

+0

double possible de [Copier tous les fichiers et dossiers d'un répertoire à un autre PHP répertoire] (http: // stackoverflow. com/questions/1513618/copy-all-files-and-folder-from-one-directory-to-another-directory-php) –

Répondre

22

C'est ce que j'utilise

// Function to remove folders and files 
    function rrmdir($dir) { 
     if (is_dir($dir)) { 
      $files = scandir($dir); 
      foreach ($files as $file) 
       if ($file != "." && $file != "..") rrmdir("$dir/$file"); 
      rmdir($dir); 
     } 
     else if (file_exists($dir)) unlink($dir); 
    } 

    // Function to Copy folders and files  
    function rcopy($src, $dst) { 
     if (file_exists ($dst)) 
      rrmdir ($dst); 
     if (is_dir ($src)) { 
      mkdir ($dst); 
      $files = scandir ($src); 
      foreach ($files as $file) 
       if ($file != "." && $file != "..") 
        rcopy ("$src/$file", "$dst/$file"); 
     } else if (file_exists ($src)) 
      copy ($src, $dst); 
    } 

Utilisation

rcopy($source , $destination); 

Un autre exemple sans supprimer le fichier de destination ou d'un dossier

function recurse_copy($src,$dst) { 
     $dir = opendir($src); 
     @mkdir($dst); 
     while(false !== ($file = readdir($dir))) { 
      if (($file != '.') && ($file != '..')) { 
       if (is_dir($src . '/' . $file)) { 
        recurse_copy($src . '/' . $file,$dst . '/' . $file); 
       } 
       else { 
        copy($src . '/' . $file,$dst . '/' . $file); 
       } 
      } 
     } 
     closedir($dir); 
    } 

S'il vous plaît Voir: http://php.net/manual/en/function.copy.php pour des exemples plus juteuses

Merci :)

+7

+1 pour l'utilisation correcte du mot 'juteux' –

+5

Ce n'est vraiment pas la meilleure option! Utilisez à la place [renommer ($ sourceFolder, $ targetFolder)] (http://www.php.net/manual/de/function.rename.php) qui est juste une seule ligne de code et déplace votre dossier complet. Je sais que le nom de la méthode ne précise pas qu'elle fait bouger les choses, mais bon, c'est le cas. – vinzenzweber

+0

Je sais que c'est un ancien post mais quand même - vous n'avez pas besoin d'utiliser DIRECTORY_SEPARATOR au lieu de '/' pour la compatibilité du système? –

15

Utilisez rename au lieu de copy.

Contrairement à la fonction C avec le même nom, rename peut déplacer un fichier d'un système de fichiers à un autre (depuis PHP 4.3.3 sous Unix et depuis PHP 5.3.1 sous Windows).

+0

Merci de donner votre temps précieux pour répondre au problème ... mais je suis sûr qu'il est pas pertinent avec le problème ..votre réponse ne fonctionne que pour ** fichiers ** et pas pour le dossier. –

0

Je l'utilise

// function used to copy full directory structure from source to target 
function full_copy($source, $target) 
{ 
    if (is_dir($source)) 
    { 
     mkdir($target, 0777); 
     $d = dir($source); 

     while (FALSE !== ($entry = $d->read())) 
     { 
      if ($entry == '.' || $entry == '..') 
      { 
       continue; 
      } 

      $Entry = $source . '/' . $entry;   
      if (is_dir($Entry)) 
      { 
       full_copy($Entry, $target . '/' . $entry); 
       continue; 
      } 
      copy($Entry, $target . '/' . $entry); 
     } 

     $d->close(); 

    } else { 
     copy($source, $target); 
    } 
} 
7

dossier mouvement:

rename("./path/old_folder_name", "./path/new_folder_name"); 
0
$src = 'user_data/company_2/T1/'; 
$dst = 'user_data/company_2/T2/T1/'; 

rcopy($src, $dst); // Call function 
// Function to Copy folders and files  
function rcopy($src, $dst) { 
    if (file_exists ($dst)) 
     rrmdir ($dst); 
    if (is_dir ($src)) { 
     mkdir ($dst); 
     $files = scandir ($src); 
     foreach ($files as $file) 
      if ($file != "." && $file != "..") 
       rcopy ("$src/$file", "$dst/$file"); 

    } else if (file_exists ($src)) 
     copy ($src, $dst); 
        rrmdir ($src); 
}  

// Function to remove folders and files 
function rrmdir($dir) { 
    if (is_dir($dir)) { 
     $files = scandir($dir); 
     foreach ($files as $file) 
      if ($file != "." && $file != "..") rrmdir("$dir/$file"); 
     rmdir($dir); 
    } 
    else if (file_exists($dir)) unlink($dir); 
} 
Questions connexes