4

我正在尝试将文件从特定文件夹 ($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); 
} 

?>

我没有收到上述代码的任何错误。

4

2 回答 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);
      }

?>
于 2013-10-02T23:47:31.187 回答
2

如果您没有尝试做任何特殊处理(例如过滤某些文件或其他),我只会使用 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 命令中可用的任何选项。

这也应该比您的逐个文件递归方法执行得更快。

于 2013-10-02T23:35:34.453 回答