2012-03-23 15 views
8

Quiero mover todos los archivos y carpetas dentro de una carpeta a otra carpeta. Encontré un código para copiar todos los archivos dentro de una carpeta a otra carpeta. move all files in a folder to anothermover todos los archivos y carpetas en una carpeta a otra?

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

¿Cómo puedo cambiar esto para mover todas las carpetas y archivos dentro de esta carpeta a otra carpeta.

+0

posible duplicado de [Copiar todos los archivos y carpetas de un directorio a otro directorio de PHP] (http: // stackoverflow. com/questions/1513618/copy-all-files-and-folder-from-one-directory-to-another-directory-php) –

Respuesta

22

Esto es lo que yo 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); 

Otro ejemplo sin borrar el archivo o carpeta de destino

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

, véase: http://php.net/manual/en/function.copy.php para ejemplos más jugosos

Gracias :)

+7

+1 para el uso correcto de la palabra 'jugoso' –

+5

¡Realmente esta no es la mejor opción! Utilice [rename ($ sourceFolder, $ targetFolder)] (http://www.php.net/manual/de/function.rename.php) en su lugar, que es solo una línea de código y mueve su carpeta completa. Sé que el nombre del método no deja en claro que realmente mueve cosas, pero bueno, lo hace. – vinzenzweber

+0

Sé que esta es una publicación anterior, pero aún así, ¿no necesita usar DIRECTORY_SEPARATOR en lugar de '/' para la compatibilidad del sistema? –

15

Use rename en lugar de copy.

A diferencia de la función C con el mismo nombre, rename puede mover un archivo de un sistema de archivos a otro (desde PHP 4.3.3 en Unix y desde PHP 5.3.1 en Windows).

+0

Gracias por darnos su valioso tiempo para responder al problema ... pero estoy seguro de que es no relevante con el problema ... tu respuesta solo funciona para ** archivos ** y no para la carpeta. –

0

lo uso

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

mover carpetas:

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