2009-11-12 270 views
1

我发现关于复制文件这个问题(在这里),而不会覆盖复制文件夹,而不会覆盖

How do you copy a file in PHP without overwriting an existing file?

我需要的是一个PHP脚本将所有文件复制在文件夹,有还有一些子文件夹;所以它应该是递归的。

我需要通过FTP传输它,所以我不知道这对方法有很大的影响。

非常感谢!

+1

我可以问它是什么,需要这是用PHP编写的脚本。似乎使用rsync会为您所付出的努力提供更好的里程。 – 2009-11-12 10:28:12

+0

我需要复制SQL服务器数据库文件(.bak等),所以非常大的文件。我正在运行脚本的服务器,作为目标服务器上的文件所在的源服务器是Linux服务器。 我正在考虑PHP,因为所有其他脚本都在PHP中,但欢迎其他建议。 Thx – laurens 2009-11-12 10:37:07

回答

3

手册页面上试试这个,从a commentcopy

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

注意,该解决方案将愉快地覆盖中存在的$dst目录中的任何文件。如果你想避免这种情况,你可以将this question中的代码封装到一个函数中,然后调用该函数而不是copy

我不确定你想通过FTP传输什么,如果你澄清我很乐意编辑我的答案。

+0

非常友善,thx的答复。此解决方案是否适用于FTP? 我想用SQL数据库文件(相当大的文件...)传输几个文件夹。 我会在不同的服务器上运行脚本,然后运行数据库所在的服务器。目的地是另一台服务器。 覆盖应该完全避免,因为文件太大了。 提前谢绝! – laurens 2009-11-12 10:17:23

+0

我对你的评论有点困惑 - 抱歉,如果我密集。如果你想从远程文件夹中获取文件,那么你需要做更多的工作(参见'ftp_get'和'ftp_nlist');如果你想把这些文件放到远程服务器上(所以你需要从源服务器上运行备份过程),那么请参阅'ftp_put'。但埃德的权利 - PHP绝对不是这项工作的工具。 – 2009-11-12 10:48:18

+0

我的不好。显然我需要寻找一个bash解决方案(?) – laurens 2009-11-12 10:52:53