Я знаю, что есть довольно много кода на эту тему. Но я не могу заставить код, который я нашел, работать …
Я использую функцию из плагина WordPress, которая называется Zip-Attachments.
Поэтому я изменил его, чтобы ZIP-файлы из определенной папки. НО это не работает ….
Кажется, что я что-то упускаю, когда дело доходит до точного назначения путей в классе RecursiveDirectoryIterator.
Мне удалось заархивировать один файл и загрузить его без функции recursiveIteration и передать абсолютный путь в виде строки. Так что основная часть функции работает.
Чего мне не хватает, чтобы заставить эту функцию работать?
Вот мой нерабочий код:
function za_create_zip_callback(){
$upload_dir = wp_upload_dir();
$rootPath = $upload_dir['basedir'];
$upload_dir_Knippsbox = 'Knippsbox';
// Prepare File
$file = tempnam($upload_dir['path'], "zip");
$zip = new ZipArchive();
$zip->open($file, ZipArchive::OVERWRITE);
// create recursive directory iterator
$files = new RecursiveIteratorIterator (new RecursiveDirectoryIterator("{$rootPath}/{$upload_dir_Knippsbox}/"), RecursiveIteratorIterator::LEAVES_ONLY);
// let's iterate
foreach ($files as $name => $fileX) {
$filePath = $fileX->getRealPath();
$zip->addFile($filePath);
}
//Close the file
$zip->close();
// Add a download to the Counter
global $wpdb;
$meta_name = "_za_counter";
// Retrieve the meta value from the DB
$za_download_count = get_post_meta($postId, $meta_name, true) != '' ? get_post_meta($postId, $meta_name, true) : '0';
$za_download_count = $za_download_count + 1;
// Update the meta value
update_post_meta($postId, $meta_name, $za_download_count);
// We have to return an actual URL, that URL will set the headers to force the download
echo zip_attachments_url."/download.php?za_pretty_filename=".sanitize_file_name($pretty_filename)."&za_real_filename=".$filename;
die();}
Отчаянно ищите ваши экспертные мнения …
Спасибо,
Бен
Задача ещё не решена.
Других решений пока нет …