PHP如何将一个文件夹中的所有文件复制到另一个文件夹?

6
我正在尝试将文件从一个特定的文件夹($src)复制到另一个特定的目标文件夹($dst)。我从这个教程获取了代码。但是我好像无法复制源文件夹中的任何文件。
<?php


$src = 'pictures';
$dst = 'dest';

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

?>

我没有在以上代码中收到任何错误。

你能读取文件吗?有收到任何错误吗? - Ricardo Nuñez
1
我喜欢很多人在发布问题时省略了最重要的部分——错误信息... - OIS
使用Linux shell命令有什么不可行的原因吗?看起来你在这里并没有做什么特别有趣的事情(比如过滤某些文件),所以我会直接使用Linux命令(必要时从PHP调用)。 - Mike Brant
以上代码没有出现任何错误。 - Panny Monium
我已经将你的函数与你所引用的函数进行了比较,看起来是有效的。在“无结果,无错误”的情况下,其中一个候选者是:当然,你在代码中运行了recurse_copy($src,$dst);吗? - Kita
2个回答

11

我刚刚尝试了这个方法,结果非常成功。

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

?>

3
如果你不需要进行任何特殊处理(比如筛选特定文件等),我建议使用shell命令来完成这个任务。
以下是一个Linux的例子:
$src = '/full/path/to/src'; // or relative path if so desired 
$dst = '/full/path/to/dst'; // or relative path if so desired
$command = 'cp -a ' . $src . ' ' .$dst;
$shell_result_output = shell_exec(escapeshellcmd($command));

当然,如果您想调整行为(例如更改所有权等),只需使用 shell 命令提供的任何选项即可。这种方法的执行速度比您逐个文件递归处理要快得多。

首选方法是(1)性能:正如您所提到的,这将“比您的逐个文件递归方法执行得快得多”;以及(2)关注点委托:您应该使用文件系统来处理文件系统,并使用PHP来处理Web。 - Nick Mitchell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接