PHP迭代并删除目录问题
我已经建立了一个系统,用户可以启动一个项目并将文件上传到此项目。当他们创建项目时,我专门为该项目创建了一个目录,所有上传都会填充这个目录。然而,我已经实现了一个系统,允许用户删除这个项目,如果他们愿意的话,删除目录中的所有文件,然后删除目录本身 在本地(在MAMP上),这是一种魅力;但是,在实时服务器上,它不会。对于目录删除,我使用了教程网站(发布在下面)中的一段代码,正如我所说,在本地Web服务器上运行良好PHP迭代并删除目录问题,php,directory,Php,Directory,我已经建立了一个系统,用户可以启动一个项目并将文件上传到此项目。当他们创建项目时,我专门为该项目创建了一个目录,所有上传都会填充这个目录。然而,我已经实现了一个系统,允许用户删除这个项目,如果他们愿意的话,删除目录中的所有文件,然后删除目录本身 在本地(在MAMP上),这是一种魅力;但是,在实时服务器上,它不会。对于目录删除,我使用了教程网站(发布在下面)中的一段代码,正如我所说,在本地Web服务器上运行良好 $name = $_POST['projectName']; rrmdir("../.
$name = $_POST['projectName'];
rrmdir("../../project/$name");
function rrmdir($dir) {
if (is_dir($dir)) {
$objects = scandir($dir);
foreach ($objects as $object) {
if ($object != "." && $object != "..") {
if (filetype($dir."/".$object) == "dir") rrmdir($dir."/".$object); else unlink($dir."/".$object);
}
}
reset($objects);
rmdir($dir);
echo "Directory Removed";
}
注意您使用的相对路径,请查看此注释是否有帮助: 试试这个:
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator('/path/to/project/directory'),
RecursiveIteratorIterator::CHILD_FIRST);
foreach($iterator as $fileObject) {
if($fileObject->isFile()) {
echo 'Removing File: ', $fileObject->getRealpath(), PHP_EOL;
// unlink($fileObject->getRealpath());
} elseif($fileObject->isDir()) {
echo 'Removing Dir: ', $fileObject->getRealpath(), PHP_EOL;
// rmdir($fileObject->getRealpath());
}
}
取消注释
rmdir
和取消链接
行,以实际执行删除操作。请非常小心:
$name = $_POST['projectName'];
rrmdir("../../project/$name");
这就像是对服务器文件系统的SQL注入,想象一下如果有人在浏览器中键入此内容:您可能希望查看以帮助关闭这个巨大的安全漏洞,并将相对路径转换为绝对路径。如果目标目录不是空的,那么rmdir将无法工作,您需要先删除所有子目录和文件,然后rmdir才能工作。您是否通过CHMOD对文件夹设置了相应的权限?是否为777?我想是的,但是在调用函数之后脚本似乎停止了。在rrmdir(…)行下面,我有几个回声,他们根本没有开火。谢谢你,但是帖子来自他们项目的下拉列表,这个字段是不可编辑的。谢谢,表单只是实际POST数据的GUI。此帖子数据很容易伪造,或者可以被截获,并使用类似插件的篡改数据()进行篡改。以下是一个优秀的web安全应用程序/教学: