如何删除目录 php

how to delete directory php

我正在尝试制作表格以删除所选选项,该选项是 images 目录中的子目录。我有一个函数可以删除子文件夹中的所有文件,然后删除整个子文件夹,但是当我调用它时,没有任何反应。有人能帮我吗? 这是我的 html 表格和 php 代码:

    <form method='post' action='/category'>
    <div class="form-group">
    <select  class="custom-select" name="category_to_delete" style="width:60%;">
    <?php 

    foreach(glob(dirname(__FILE__) . '/images/*') as $categories_list){
       if(is_dir($categories_list)){
          $categories_list = basename($categories_list);

    echo "<option value='" . $categories_list . "'>".$categories_list."</option>";
       }
    }
    ?>

    </select>
    </div>
    <?php
    function delete_directory($dirname) {
       if (is_dir($dirname))
          $dir_handle = opendir($dirname);
       if (!$dir_handle)
          return false;
       while($file = readdir($dir_handle)) {
             if ($file != "." && $file != "..") {
               if (!is_dir($dirname."/".$file))
                  unlink($dirname."/".$file);
               else
                  delete_directory($dirname.'/'.$file);
            }
        }
        closedir($dir_handle);
        rmdir($dirname);
        return true;
        }
        if(isset($_POST['delete'])){
           if(isset($_GET['category_to_delete']) && $_GET['category_to_delete']!=''){
                $category_delete = $_POST['category_to_delete'];
                delete_directory('images/'.$category_delete);
                echo "Deleted";
           }
        }

       ?>
       <div class="form-group">          
       <button type='submit' value='Delete' name='delete'> Usuń</button>
       </div>
</form>

我发现你的脚本有错误。这是答案,希望这会解决它(如果某处没有其他错误):

您的表单是使用 method="post" 发送的:<form method='post' action='/category'>

在您的代码中,您检查 $_GET

错误: if(isset($_GET['category_to_delete']) && $_GET['category_to_delete']!=''){

正确:if(isset($_POST['category_to_delete']) && $_POST['category_to_delete']!=''){

最终代码必须如下所示:

if(isset($_POST['delete'])){
    if(isset($_POST['category_to_delete']) && $_POST['category_to_delete']!=''){
            $category_delete = $_POST['category_to_delete'];
            delete_directory('images/'.$category_delete);
            echo "Deleted";
    }
}

另请注意,您选中 isset($_POST['delete']) -> 它是您的按钮。如果您不单击按钮并按 Enter 键发送 <form>,则没有 $_POST['delete'],它将不起作用。

再给你一个信息:

你的函数 delete_directory 和你的表单处理 if(isset($_POST['delete'])){ 放在你的 foreach(glob(dirname(__FILE__) . '/images/*') as $categories_list){

之后

这意味着,如果您要删除某些内容并发送表单即可。 dropdown/select 将再次包含这些文件,因为目录 images/* 中的文件将在您真正处理表单之前再次扫描(删除您选择的 files/directory)。你应该把功能和表格的处理放在类别之前。通常像这样的事情会在任何 HTML/Output 处理之前完成。