Я использую WordPress. Я создал форму, в которой пользователи проверяют, какие файлы должны быть включены в заархивированную папку, и на сервере создается папка с файлами.
У меня вопрос, как мне перенести эту вновь созданную zip-папку на клиент? Я хотел бы, чтобы пользователь мог выбрать, где на клиенте также загружается папка.
HTML
<form method="post">
<input type="checkbox" name="checked[]" value="<?php echo $path; ?>">
<input type="submit" name="download" value="Download Selected">
</form>
PHP
if(isset( $_POST['download'] ) && !empty($_POST['checked']) ){
$files = $_POST['checked'];
$zip = new ZipArchive();
$zip_name = time().".zip"; // Zip name
$zip->open($zip_name, ZipArchive::CREATE);
$full = wp_upload_dir();
$base = $full['baseurl'] .'/';
if (is_array($files)){
foreach ($_POST['checked'] as $file) {
echo $full_path = $file;
echo $_SERVER['DOCUMENT_ROOT'] . $full_path;
if(file_exists($_SERVER['DOCUMENT_ROOT'].'/bcg/wp-content/uploads/'.$full_path)){
$zip->addFromString(basename($base . $full_path), file_get_contents($base . $full_path));
echo 'file exists';
bcg_download_function($zip_name);
}
else{
echo"file does not exist";
}
}
header('Content-Type: application/zip');
header('Content-disposition: attachment; filename='.$zip_name);
header('Content-Length: ' . filesize($zip_name));
readfile($zip_name);
$zip->close();
}
}
Вам нужно использовать технологию AJAX.
Переименуй свой input type="submit"
в input type="button"
Перехватить нажмите на эту кнопку в вашем коде JS
По клику, отправьте запрос ajax из браузера на ваш сервер
В функции обработки ajax используйте код php, показанный здесь, сформировать и вернуть ссылку на вновь созданный почтовый индекс
В вашем js-коде, в функции успеха ajax, получите эту ссылку и покажите ее пользователю.
Вы можете прочитать подробное руководство по использованию ajax в WordPress. Вот.
Других решений пока нет …