【问题标题】:PHP cannot delete directoryPHP无法删除目录
【发布时间】:2013-04-28 20:40:09
【问题描述】:

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

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

【问题讨论】:

  • PHP进程是否有正确的所有权/文件权限来删除目录?
  • 看到这个answer
  • 如果你让它工作 - 小心使用 get 参数删除任意目录的脚本
  • 好点@PeterAjtai..
  • 如果名称文件夹是 ../../../ 什么的会发生什么?

标签: php


【解决方案1】:

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

试试:

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

【讨论】:

    【解决方案2】:

    我会检查文件权限。在 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`;
    

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

    【讨论】:

      【解决方案3】:

      不是答案,但请更改:

      $nameFolder = $_GET['delete'];
      

      收件人:

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

      您可能还想添加一个:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-12-27
        • 1970-01-01
        • 2010-09-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多