【问题标题】:how to delete directory php [duplicate]如何删除目录php [重复]
【发布时间】:2020-06-08 16:04:28
【问题描述】:

我正在尝试制作表单以删除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>

【问题讨论】:

  • 它会删除文件而不是目录 - 还是什么也没发生?您是否收到任何错误消息?代码看起来不错。问题是文件/目录是否具有权限以便脚本可以访问(删除)它们。
  • 什么都没有发生,所有文件都保留在文件夹中,我在网站或控制台上没有任何错误。文件和目录拥有所有权限

标签: php forms rmdir delete-directory


【解决方案1】:

我在您的脚本中发现了错误。这是答案,希望这能解决它(如果某处没有另一个错误):

您的表单是使用 method="post" 发送的:&lt;form method='post' action='/category'&gt;

在你的代码中你检查$_GET

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

正确:if(isset($_POST['category_to_delete']) &amp;&amp; $_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 发送&lt;form&gt;,则没有$_POST['delete'],它将无法正常工作。

为您提供更多信息:

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

这意味着,如果您想删除某些内容并发送表单来执行此操作。下拉/选择将再次包含文件,因为在您真正处理表单之前(删除您选择的文件/目录),目录images/* 中的文件将被再次扫描。您应该将表单的功能和处理放在类别之前。通常这样的事情会在任何 HTML/输出处理之前完成。

【讨论】:

  • 啊,是的,非常感谢!我没有注意到这个错误。我更正了我的代码,现在它运行良好。谢谢你:)
  • 是的,这是一个如此简单的错误,很难识别,因为你没有用这样的错误来计算。我还得再看一眼。 :-)
猜你喜欢
  • 2011-11-09
  • 1970-01-01
  • 2014-03-19
  • 2021-05-02
  • 1970-01-01
  • 1970-01-01
  • 2021-06-21
  • 2010-12-06
  • 2013-07-07
相关资源
最近更新 更多