2012-03-23 19 views
8

Voglio spostare tutti i file e le cartelle all'interno di una cartella in un'altra cartella. Ho trovato un codice per copiare tutti i file all'interno di una cartella in un'altra cartella. move all files in a folder to anothersposta tutti i file e le cartelle in una cartella in un'altra?

// 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); 
} 

come faccio a cambiare questo per spostare tutte le cartelle ei file all'interno di questa cartella in un'altra cartella.

+0

possibile duplicato di [Copiare tutti i file e le cartelle da una directory ad un'altra directory PHP] (http: // StackOverflow. it/questions/1513618/copy-all-files-and-folder-da-one-directory-a-another-directory-php) –

risposta

22

Questo è quello che uso

// 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); 
    } 

Uso

rcopy($source , $destination); 

Un altro esempio senza eliminare file o una cartella di destinazione

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); 
    } 

consultare: http://php.net/manual/en/function.copy.php per gli esempi più succosa

Grazie :)

+7

+1 per l'uso corretto della parola "sugoso" –

+5

Questa non è la soluzione migliore! Usa invece [rinominare ($ sourceFolder, $ targetFolder)] (http://www.php.net/manual/de/function.rename.php) invece che è solo una singola riga di codice e sposta la cartella completa. So che il nome del metodo non chiarisce che in realtà sposta le cose, ma, beh, lo fa. – vinzenzweber

+0

So che questo è vecchio post ma ancora - non è necessario utilizzare DIRECTORY_SEPARATOR invece di "/" per la compatibilità del sistema? –

15

Utilizzare rename anziché copy.

A differenza della funzione C con lo stesso nome, rename può spostare un file da un file system a un altro (da PHP 4.3.3 su Unix e da PHP 5.3.1 su Windows).

+0

Grazie per aver dedicato il tuo prezioso tempo per rispondere al problema ... ma sono sicuro che sia non pertinente con il problema .. la tua risposta funziona solo per ** file ** e non per cartella. –

0

lo uso cartella

// 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

mossa:

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); 
} 
Problemi correlati