#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. В нем будет указан только один файл.