Как просматривать и удалять zip-файлы и папки в каталоге

#php

#php

Вопрос:

Я пытаюсь получить список всех zip-файлов в моем конкретном каталоге, например.

 C:/xampp/htdocs
  

Но самое главное, что я хотел бы получить весь zip-файл из всех папок, означает, что он должен проверять все вложенные папки.

После получения всего zip-файла я хотел бы удалить zip-файл нажатием кнопки удаления.

Я попробовал следующий пример, погуглив, но не работает. Я также пробовал и другое решение.

 foreach (glob("*.zip") as $filename) {
 if(unlink($filename))
        echo "success" ;
 else
        echo "Failure"
}
  

или

   <?php 
function list_zipfiles($mydirectory) {

    // directory we want to scan
    $dircontents = scandir('c:/xampp/htdocs');

    // list the contents
    echo '<ul>';
    foreach ($dircontents as $file) {
        $extension = pathinfo($file, PATHINFO_EXTENSION);
        if ($extension == 'zip') {
            echo "<li>$file </li>";
        }
    }
    echo '</ul>';
}
  

Ответ №1:

При этом будут перечислены все zip-файлы в определенном каталоге.

Для тестирования вы можете создать тестовую папку и добавить в нее некоторую внутреннюю папку и поместить zip-файлы. Так что сканирование и отображение всех файлов не займет много времени.

 <?php

$mydirectory    = 'C:/xampp/htdocs/test';


// create recursive directory iterator for zip folder
$directory_iterator = new RecursiveDirectoryIterator($mydirectory); 
// required to iterate through results using foreach
$recursive_iterator = new RecursiveIteratorIterator($directory_iterator);
// filter only .zip files
$regex_iterator = new RegexIterator($recursive_iterator, '/^.*.zip$/',
                          RegexIterator::GET_MATCH);

// iterate through results
foreach($regex_iterator as $file_info) {
    var_dump($file_info);
}
  

Чтобы удалить файл

используйте функцию unlink() для удаления файлов. При нажатии на определенную ссылку вы должны перейти на страницу php, где вы можете получить имя файла и удалить его.

 <?php

    if(isset($_POST) amp;amp; !empty($_POST) amp;amp; $_SERVER['REQUEST_METHOD'] === 'POST'){

        if (!empty($_POST['zip_file'])) {
            if (!unlink($_POST['zip_file']))
            {
               echo ("file cannot be deleted due to an error");
            }
            else
            {
               echo ("file has been deleted");
            }
        }
        header('location:zip_delete_demo.php');
        die();
    }

?>

    <html>
    <body>
        <form method="post" name="zip_form" id="zip_form">
        <?php
        $mydirectory    = 'C:xampphtdocsphp_demo';
        $directory_iterator = new RecursiveDirectoryIterator($mydirectory); 
        $recursive_iterator = new RecursiveIteratorIterator($directory_iterator);
        $regex_iterator = new RegexIterator($recursive_iterator, '/^.*.zip$/',RegexIterator::GET_MATCH);

        foreach($regex_iterator as $file_info) {
            echo '<a class="btn_delete_zip" href="javascript:void(0);" data-href="'.$file_info[0].'">'.$file_info[0].'</a><br/>';
?>

  <?php          
        }

        ?>

        </form>
    </body>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script>
        $(document).ready(function(){
            $(document).on('click','.btn_delete_zip',function(){
                var zip_file = jQuery(this).data('href');

                var input = $("<input>")
               .attr("name", "zip_file")
               .attr("type", "hidden")
               .val(zip_file);

                $('#zip_form').append(input);
                $('#zip_form').submit();


            });
        });
    </script>
    </html>
  

Примечания

Пожалуйста, увеличьте максимальное время выполнения в файле php.ini. Пожалуйста, не проверяйте свой код, вводя какие-либо функции exist или die. В нем будет указан только один файл.