Собственно суть вопроса в заголовке. Есть у меня две функции, одна удаляет всё что находится внутри директории(
все папки со всеми файлами), а другая архивирует все файлы(
но не папки и в этом проблема) и отдаёт на скачку, так вот как мне засунуть и папки в архив?
Ниже привожу код функций(
ф-я удаления чисто для примера, может кому пригодится):
Ф-я удаления: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 ('Произошла ошибка при создании архива');
}
Памагити