1

我正在尝试删除其中包含文件的文件夹,但以下代码确实删除了文件,但没有删除文件夹。

$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';
}
4

3 回答 3

3

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

尝试:

<?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);
?>

来源:http ://www.php.net/manual/pt_BR/function.rmdir.php#108113

于 2013-04-28T23:41:19.790 回答
1

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

ls -al /path/to/projecten/projecten/

简单来说,Web 服务器用户必须对目录具有写入权限才能删除文件,例如用户 www-data。在下面的示例中,用户 lt 可以删除测试文件:

drwxrwxr-x 2 lt lt 4096 Apr 29 08:54 test

我也不明白这段代码:

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

为什么不只是有:

rmdir($dir);

因为 $status 将始终为“真”。

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

system `rm -rf /full/path/to/projecten/projecten/$nameFolder`;

不过要非常小心那个系统命令——如果你删除了错误的目录,就没有回头路了!

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

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

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

于 2013-04-28T23:27:50.380 回答
0

不是答案,但请更改:

$nameFolder = $_GET['delete'];

至:

$nameFolder = basename($_GET['delete']);

您可能还想添加一个:

 if (is_dir('../projecten/projecten/'.$nameFolder) {
     // ... do stuff here
 } else {
     // not a valid path
 }
于 2013-04-28T23:50:17.473 回答