使用PHP脚本将所有文件从一个文件夹复制到另一个文件夹


Copy all files from one folder to another Folder using PHP scripts?

基本上,我的要求是,我想使用PHP脚本将所有文件从一个文件夹移动到另一个文件夹。任何人都可以帮助我。我正在尝试这个,但我得到了错误

 $mydir = dirname( __FILE__ )."/html/images/";
   if(!is_dir($mydir)){
       mkdir("html/images");
   } 
   // Move all images files
   $files = glob("images/*.");
   foreach($files as $file){
   $file_to_go = str_replace("images/","html/images/",$file);
       copy($file, $file_to_go);
   }
// images folder creation using php
   $mydir = dirname( __FILE__ )."/html/images";
   if(!is_dir($mydir)){
   mkdir("html/images");
   }
   // Move all images files
   $files = glob("images/*.*");
   foreach($files as $file){
   $file_to_go = str_replace("images/","html/images/",$file);
         copy($file, $file_to_go);
   }

试试这个:

<?php
   $src = 'pictures';
   $dst = 'dest';
   $files = glob("pictures/*.*");
   foreach($files as $file){
       $file_to_go = str_replace($src,$dst,$file);
       copy($file, $file_to_go);
  }
?>
foreach(glob('old_directory/*.*') as $file) {
  copy('old_directory/'.$file, 'new_directory/'.$file);
}

这应该可以正常工作:

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

或者使用rename()和一些错误检查:

$srcDir = 'dir1';
$destDir = 'dir2';
if (file_exists($destDir)){
  if (is_dir($destDir)) {
    if (is_writable($destDir)) {
      if ($handle = opendir($srcDir)) {
        while (false !== ($file = readdir($handle))) {
          if (is_file($srcDir . '/' . $file)) {
            rename($srcDir . '/' . $file, $destDir . '/' . $file);
          }
        }
        closedir($handle);
      } else {
        echo "$srcDir could not be opened.'n";
      }
    } else {
      echo "$destDir is not writable!'n";
    }
  } else {
    echo "$destDir is not a directory!'n";
  }
} else {
  echo "$destDir does not exist'n";
} 

使用array_map:

// images folder creation using php
function copyFile($file) {
   $file_to_go = str_replace("images/","html/images/",$file);
   copy($file, $file_to_go);
}
$mydir = dirname( __FILE__ )."/html/images";
if(!is_dir($mydir)){
  mkdir("html/images");
}
// Move all images files
$files = glob("images/*.*");
print_r(array_map("copyFile",$files));

这个对我有用…………..
感谢这个人
http://www.codingforums.com/php/146554-copy-one-folder-into-another-folder-using-php.html

 <?php
    copydir("admin","filescreate");
    echo "done";
    function copydir($source,$destination)
    {
    if(!is_dir($destination)){
    $oldumask = umask(0); 
    mkdir($destination, 01777); // so you get the sticky bit set 
    umask($oldumask);
    }
    $dir_handle = @opendir($source) or die("Unable to open");
    while ($file = readdir($dir_handle)) 
    {
    if($file!="." && $file!=".." && !is_dir("$source/$file"))
    copy("$source/$file","$destination/$file");
    }
    closedir($dir_handle);
    }
    ?>

您可以使用这个递归函数。

<?php 
    function copy_directory($source,$destination) { 
        $directory = opendir($source); 
        @mkdir($destination); 
        while(false !== ( $file = readdir($directory)) ) { 
            if (( $file != '.' ) && ( $file != '..' )) { 
                if ( is_dir($source . '/' . $file) ) { 
                    copy_directory($source . '/' . $file,$destination . '/' . $file); 
                } 
                else { 
                    copy($source . '/' . $file,$destination . '/' . $file); 
                } 
            } 
        } 
        closedir($directory); 
    } 
?>

推荐人:http://php.net/manual/en/function.copy.php

我遇到过类似的情况,需要从一个域复制到另一个域,我对上面"coDe murdrer"给出的"非常简单的答案"进行了微小的调整,解决了这个问题:以下正是在我的情况下行之有效的方法,你也可以根据自己的情况进行调整:

foreach(glob('../folder/*.php') as $file) {
$adjust = substr($file,3);
copy($file, '/home/user/abcde.com/'.$adjust);

请注意使用了"substr()",如果没有它,目标将变成"/home/user/abcde.com/../folder/",这可能是您不想要的。因此,我使用substr()来消除前3个字符(../),以获得所需的目的地,即"/home/user/abcde.com/folder/"。因此,您可以调整substr(。希望这能有所帮助。