PHP无法删除目录

PHP无法删除目录,php,Php,我试图删除一个文件夹,其中包含文件,但下面的代码确实删除了文件,但没有删除文件夹 $nameFolder = $_GET['delete']; $dir = '../projecten/projecten/'.$nameFolder.''; $filesIN = glob($dir."/"."*"); $status = 'false'; foreach($filesIN as $files) //here i take all the files unlink($files); $

我试图删除一个文件夹,其中包含文件,但下面的代码确实删除了文件,但没有删除文件夹

$nameFolder = $_GET['delete'];
$dir = '../projecten/projecten/'.$nameFolder.'';
$filesIN = glob($dir."/"."*");
$status = 'false';

foreach($filesIN as $files) //here i take all the files
    unlink($files);

$status = 'true';
if($status=='true'){
    rmdir($dir);
    $status = 'false';
}

我会检查文件权限。在linux上:

ls -al /path/to/projecten/projecten/
简单来说,web服务器用户必须具有对目录的写访问权限才能删除文件,例如用户www数据。在以下示例中,用户lt可以删除测试文件:

drwxrwxr-x 2 lt lt 4096 Apr 29 08:54 test
我也不明白这段代码:

$status = 'true';
if($status=='true'){
   rmdir($dir);
   $status = 'false';
}
为什么不干脆:

rmdir($dir);
As$状态将始终为“真”

您也可以尝试使用系统调用,例如:

system `rm -rf /full/path/to/projecten/projecten/$nameFolder`;
不过,使用该系统命令时要非常小心-如果删除了错误的目录,则无法返回

如果知道目录为空,则可以使用更安全的系统命令:

system `rmdir /full/path/to/projecten/projecten/$nameFolder`;

但正如上面的评论所指出的,删除基于$GET变量的目录时要非常小心。想象一下,如果GET变量是“../../projecten”,尤其是使用“rm-rf”系统命令,我将检查文件权限。在linux上:

ls -al /path/to/projecten/projecten/
简单来说,web服务器用户必须具有对目录的写访问权限才能删除文件,例如用户www数据。在以下示例中,用户lt可以删除测试文件:

drwxrwxr-x 2 lt lt 4096 Apr 29 08:54 test
我也不明白这段代码:

$status = 'true';
if($status=='true'){
   rmdir($dir);
   $status = 'false';
}
为什么不干脆:

rmdir($dir);
As$状态将始终为“真”

您也可以尝试使用系统调用,例如:

system `rm -rf /full/path/to/projecten/projecten/$nameFolder`;
不过,使用该系统命令时要非常小心-如果删除了错误的目录,则无法返回

如果知道目录为空,则可以使用更安全的系统命令:

system `rmdir /full/path/to/projecten/projecten/$nameFolder`;

但正如上面的评论所指出的,删除基于$GET变量的目录时要非常小心。想象一下,如果GET变量是“../../projecten”,尤其是使用“rm-rf”系统命令,则只能删除空目录

试试看:

<?php
//recursively remove a directory
function rrmdir($dir) {
    foreach(glob($dir . '/' . '*') as $file) {
        if(is_dir($file)){
            rrmdir($file);
        }else{
            unlink($file);
        }
    }
    rmdir($dir);
}

//Example
$nameFolder = $_GET['delete'];
$dir = '../projecten/projecten/'.$nameFolder.'';
rrmdir($dir);
?>


来源:

[已编辑]只能删除空目录

试试看:

<?php
//recursively remove a directory
function rrmdir($dir) {
    foreach(glob($dir . '/' . '*') as $file) {
        if(is_dir($file)){
            rrmdir($file);
        }else{
            unlink($file);
        }
    }
    rmdir($dir);
}

//Example
$nameFolder = $_GET['delete'];
$dir = '../projecten/projecten/'.$nameFolder.'';
rrmdir($dir);
?>


来源:

不是答案,但请更改:

$nameFolder = $_GET['delete'];
致:

您可能还需要添加一个:

 if (is_dir('../projecten/projecten/'.$nameFolder) {
     // ... do stuff here
 } else {
     // not a valid path
 }

不是答案,但请更改:

$nameFolder = $_GET['delete'];
致:

您可能还需要添加一个:

 if (is_dir('../projecten/projecten/'.$nameFolder) {
     // ... do stuff here
 } else {
     // not a valid path
 }

PHP进程是否具有删除目录的正确所有权/文件权限?请参见此。如果能够正常工作,请小心使用get参数good point@PeterAjtai删除任意目录的脚本。如果name folder为../../../../../或其他内容,会发生什么情况?PHP进程是否具有删除目录的正确所有权/文件权限删除目录?请参见此。如果您能正常工作,请小心使用使用get参数good point@PeterAjtai删除任意目录的脚本。如果名称文件夹为../../../../或其他名称,会发生什么情况?