Переместить или удалить и принудительно загрузить архив после создания

Проще говоря, я хотел бы, чтобы мои пользователи могли загружать файлы своего веб-сайта, поэтому я создал кнопку «Загрузить веб-сайт», которая использует этот скрипт для добавления всех файлов / папок в их каталог, который находится в переменной. $direc и архивировать эти файлы / папки.

 <?
///////// DOWNLOAD ENTIRE WEBSITE:
if(isset($_POST['download_site'])){
// define some basics
$rootPath = '../useraccounts/'.$direc.'';
$archiveName = ''.$direc.'.zip';

// initialize the ZIP archive
$zip = new ZipArchive;
$zip->open($archiveName, ZipArchive::CREATE);

// create recursive directory iterator
$files = new RecursiveIteratorIterator (new RecursiveDirectoryIterator($rootPath), RecursiveIteratorIterator::LEAVES_ONLY);

// let's iterate
foreach ($files as $name => $file) {
$filePath = $file->getRealPath();
$zip->addFile($filePath);
}

// close the zip file
if (!$zip->close()) {
echo '<p>There was a problem writing the ZIP archive.</p>';
} else {
echo '<p>Successfully created the ZIP Archive!</p>';
}
}
?>

К моему удивлению, этот код работает. Хотя есть несколько икоты:

  1. Это не приводит к автоматической загрузке этого архива.
  2. Он добавляет архив в мой основной каталог, а не перемещает его в отдельный каталог по моему выбору, такой как site_downloads или удаляет его после завершения загрузки.

Исправлены ли эти проблемы или нет, есть ли лучший способ сделать это, чтобы мой основной каталог не заполнялся постоянными загрузками? Я предполагаю, что это вызовет проблему, если архив будет создан более одного раза, так как он использует имя каталога.

0

Решение

Решил это, используя несколько разных комбинаций:

 <?
///////// DOWNLOAD ENTIRE WEBSITE:
if(isset($_POST['download_site'])){
// define some basics
$rootPath = '../useraccounts/'.$direc.'';
$archiveName = ''.$direc.'.zip';

// initialize the ZIP archive
$zip = new ZipArchive;
$zip->open($archiveName, ZipArchive::CREATE);

// create recursive directory iterator
$files = new RecursiveIteratorIterator (new RecursiveDirectoryIterator($rootPath), RecursiveIteratorIterator::LEAVES_ONLY);

// let's iterate
foreach ($files as $name => $file) {
$filePath = $file->getRealPath();
$zip->addFile($filePath);
}// close the zip file
if (!$zip->close()) {
echo '<p>There was a problem writing the ZIP archive.</p>';
} else {
rename($archiveName, 'user_archives/'.$archiveName.'');
$yourfile = "user_archives/".$archiveName."";

$file_name = basename($yourfile);

header("Content-Type: application/zip");
header("Content-Disposition: attachment; filename=$file_name");
header("Content-Length: " . filesize($yourfile));

readfile($yourfile);
ignore_user_abort(true);
if (connection_aborted()) {
unlink('user_archives/'.$archiveName.'');
} else {
unlink('user_archives/'.$archiveName.'');
}
echo '<p>Successfully created the ZIP Archive!</p>';
}
}
?>

Кажется, это решает все проблемы.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector