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

时间:2014-09-11 05:58:15

标签: php

基本上,我的要求是,我想使用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);
   }

8 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:4)

试试这个:

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

答案 2 :(得分:2)

foreach(glob('old_directory/*.*') as $file) {
  copy('old_directory/'.$file, 'new_directory/'.$file);
}

答案 3 :(得分:1)

使用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));

答案 4 :(得分:1)

这个对我有用...........
感谢这个男士 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);
    }
    ?>

答案 5 :(得分:0)

这应该可以正常工作:

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

答案 6 :(得分:0)

您可以使用此递归功能。

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

答案 7 :(得分:0)

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

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()函数以及glob()函数,直到满足您的个人需求为止。希望这会有所帮助。