@kauffun

Как засунуть в архив не только файлы, но еще и папки внутри директории?

Собственно суть вопроса в заголовке. Есть у меня две функции, одна удаляет всё что находится внутри директории(все папки со всеми файлами), а другая архивирует все файлы(но не папки и в этом проблема) и отдаёт на скачку, так вот как мне засунуть и папки в архив?
Ниже привожу код функций(ф-я удаления чисто для примера, может кому пригодится):

Ф-я удаления:
function myscandir($dir){
    $list = scandir($dir);
    unset($list[0],$list[1]);
    return array_values($list);
}
function clear_dir($dir){
$list = myscandir($dir);
foreach ($list as $file){
if (is_dir($dir.$file)){
clear_dir($dir.$file.'/');
rmdir($dir.$file);
}else{
unlink($dir.$file);
}
}
}
clear_dir('./');


Ф-я архивирования и скачки:
$pathdir='./'; // путь к папке, файлы которой будем архивировать
$nameArhive = 'test.zip'; //название архива
$zip = new ZipArchive; // класс для работы с архивами
if ($zip -> open($nameArhive, ZipArchive::CREATE) === TRUE){ // создаем архив, если все прошло удачно продолжаем
    $dir = opendir($pathdir); // открываем папку с файлами
    while( $file = readdir($dir)){ // перебираем все файлы из нашей папки
            if (is_file($pathdir.$file)){ // проверяем файл ли мы взяли из папки
                $zip -> addFile($pathdir.$file, $file); // и архивируем
                echo("Заархивирован: " . $pathdir.$file) , '<br/>';
            }
    }
    $zip -> close(); // закрываем архив.
    echo 'Архив успешно создан';
    
    header("Cache-Control: public");
    header("Content-Description: File Transfer");
    header("Content-Disposition: attachment; filename=$nameArhive");
    header("Content-Type: application/zip");
    header("Content-Transfer-Encoding: binary"); 
    readfile($nameArhive);
    unlink($nameArhive);
} else {
    die ('Произошла ошибка при создании архива');
}


Памагити
  • Вопрос задан
  • 85 просмотров
Пригласить эксперта
Ответы на вопрос 1
@BorisKorobkov Куратор тега PHP
Web developer
Ф-я удаления:
rm -rf ...

Ф-я архивирования:
tar -cf ...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы