PHP迭代并删除目录问题

PHP迭代并删除目录问题,php,directory,Php,Directory,我已经建立了一个系统,用户可以启动一个项目并将文件上传到此项目。当他们创建项目时,我专门为该项目创建了一个目录,所有上传都会填充这个目录。然而,我已经实现了一个系统,允许用户删除这个项目,如果他们愿意的话,删除目录中的所有文件,然后删除目录本身 在本地(在MAMP上),这是一种魅力;但是,在实时服务器上,它不会。对于目录删除,我使用了教程网站(发布在下面)中的一段代码,正如我所说,在本地Web服务器上运行良好 $name = $_POST['projectName']; rrmdir("../.

我已经建立了一个系统,用户可以启动一个项目并将文件上传到此项目。当他们创建项目时,我专门为该项目创建了一个目录,所有上传都会填充这个目录。然而,我已经实现了一个系统,允许用户删除这个项目,如果他们愿意的话,删除目录中的所有文件,然后删除目录本身

在本地(在MAMP上),这是一种魅力;但是,在实时服务器上,它不会。对于目录删除,我使用了教程网站(发布在下面)中的一段代码,正如我所说,在本地Web服务器上运行良好

$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安全应用程序/教学: