PHP无法删除目录

时间:2013-04-28 20:40:09

标签: 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);

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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始终为'true'。

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

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

尽管如此,请注意该系统命令 - 如果删除了错误的目录,则无法返回!

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

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

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

答案 2 :(得分:0)

不是答案,但请更改:

$nameFolder = $_GET['delete'];

要:

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

您可能还想添加:

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