PHP将所选文件从A文件夹移动到B文件夹

时间:2011-03-24 10:52:56

标签: php copy directory

这是一个棘手的问题,我不知道从哪里开始,所以任何帮助都会感激不尽。

我有一个名为'source'的父文件夹(c:/ dev / source),其中包含多个子文件夹。

我需要一个PHP脚本,它将显示每个子文件夹旁边的复选框,以及一个新文件夹名称的文本字段,允许用户勾选他们想要复制到'c目的地的复选框:的/ dev /目的地/ the_folder_name_they_typed_in

当他们点击提交时,所选子文件夹将从c:/ dev / source复制到c:/ dev / destination / the_folder_name_they_typed_in

这一切都在本地内部开发服务器上运行。子文件夹将始终位于c:/ dev / source /

2 个答案:

答案 0 :(得分:1)

Somme建议:

使用白名单表示目标文件夹中允许的字符。仅在匹配时提交操作:

^[a-z0-9_-]+$

您可以将数组索引用于目录名称。通过这种方式,您可以使用foreach ($_POST["dirs"]) { ... }

遍历ckeckbox
<input type="checkbox" name="dirs[directory_name]"/>
<input type="checkbox" name="dirs[other_dir_name]"/>
<input type="checkbox" name="dirs[third_directory_name]"/>

始终检查上面列出的白名单目录名称。 (如果您允许使用./或其他许多字符,则可能存在安全风险。)

答案 1 :(得分:0)

这是一个名为DirectoryIterator的鲜为人知的代码。它没有在PHP网站上完整记录,但是它的主旨是:

创建一个包含复选框的文件和文件夹列表,将它们全部打包在一个数组中。

$Directory = new RecursiveDirectoryIterator('c:/dev/source');
$Iterator = new RecursiveIteratorIterator($Directory);    

?><form method="post"><?
foreach($Iterator  as $r){

       if($r->isDot()) continue;

       echo "<input type=\"checkbox\" name=\"copy[]\" value=\"".($r->getSubPathName())."\"> ".$r->getSubPathName() . " <br>";

}
?></form><?

现在将此部分添加到文件顶部

<?php 
if($_POST){
if(is_array($_POST['copy'])) foreach($_POST['copy'] as $c){
 @copy($c, str_replace('c:/dev/source','c:/dev/dest', $c));
  echo "copied: $c to ". str_replace('c:/dev/source','c:/dev/dest', $c) . "<br>";

}
}

我不完全确定从$r->getSubPathName()获得的结果是否可以让我知道它是否输出数组?如果是这样,可能是你用$ r-&gt; getSubPath()替换它,然后在复制它时将“c:/ dev / source”添加到变量$ c?

进一步阅读:

here