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

PHP将所选文件从A文件夹移动到B文件夹,php,copy,directory,Php,Copy,Directory,这是一个棘手的问题,我不知道从哪里开始,所以任何帮助都将不胜感激 我有一个名为“source”(c:/dev/source)的父文件夹,其中包含几个子文件夹 我需要一个PHP脚本,它将显示子文件夹,每个子文件夹旁边都有复选框,以及一个新文件夹名称的文本字段,允许用户勾选要复制到“c的目的地:/dev/destination/the_folder_name_”的复选框 单击“提交”时,所选子文件夹将从c:/dev/source复制到c:/dev/destination/the_folder_nam

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

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

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

单击“提交”时,所选子文件夹将从c:/dev/source复制到c:/dev/destination/the_folder_name_中


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

下面是一段不太为人所知的代码,名为DirectoryIterator。PHP站点上没有完整的文档记录,但以下是它的jist:

创建一个文件和文件夹列表,旁边有复选框,将它们全部放入一个数组中

$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><?
$Directory=new recursivedirectoryinterator('c:/dev/source');
$Iterator=新的递归迭代器($Directory);

这里有一段不太为人所知的代码,叫做DirectoryIterator。PHP站点上没有完整的文档记录,但以下是它的jist:

创建一个文件和文件夹列表,旁边有复选框,将它们全部放入一个数组中

$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><?
$Directory=new recursivedirectoryinterator('c:/dev/source');
$Iterator=新的递归迭代器($Directory);
?>一些建议:

对目标文件夹中允许的字符使用白名单。仅在符合以下条件时提交操作:

^[a-z0-9_-]+$
您可以对目录名使用数组索引。通过这种方式,您可以使用
foreach($\u POST[“dirs”]){…}

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

始终对照白名单检查目录名,如上文所述。(如果允许使用
/
等字符或许多其他字符,则可能存在安全风险)。

一些建议:

对目标文件夹中允许的字符使用白名单。仅在符合以下条件时提交操作:

^[a-z0-9_-]+$
您可以对目录名使用数组索引。通过这种方式,您可以使用
foreach($\u POST[“dirs”]){…}

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


始终对照白名单检查目录名,如上文所述。(如果允许使用
/
等字符或其他许多字符,则可能存在安全风险)。

从函数开始。从函数开始。谢谢。但它抛出了一个错误:致命错误:调用未定义的方法SplFileInfo::isDot(),您运行的PHP版本是@PHPnoob?谢谢Jason。但它抛出了一个错误:致命错误:调用未定义的方法SplFileInfo::isDot(),您运行的PHP版本是@PHPnoob?