Я пытаюсь дать пользователю возможность скачать архив в WordPress, но загрузка не начинается после создания архива. Я вижу, что мой архив создан, она доступна на сервере. Вот мой код:
Моя библиотека»
<?php
function create_zip($files = array(), $destination = '', $overwrite = false) {
if(file_exists($destination) && !$overwrite) {
return false;
}
$valid_files = array();
if(is_array($files)) {
foreach($files as $file) {
if(file_exists($file)) {
$valid_files[] = $file;
}
}
}
if(count($valid_files)) {
$zip = new ZipArchive();
if($zip->open($destination,$overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) {
return false;
}
foreach($valid_files as $file) {
$zip->addFile($file,$file);
}
$zip->close();
return file_exists($destination);
} else {
return false;
}
}
?>
Функция, вызываемая WordPress:
<?php
require "zip.php";
$customwp = plugins_url().'/customwp/';
wp_enqueue_style('tutoriels',$customwp.'css/tutoriels.css');
wp_enqueue_script('tutoriels',$customwp.'js/tutoriels.js',array('jquery'),'1.0',true);
ob_start();
$dir = ABSPATH . 'wp-content/plugins/customwp/';
$files_to_zip = array(
$dir.'zip.php'
);
$archive_name = "archive.zip";
$result = create_zip($files_to_zip, $archive_name);
header('Content-Transfer-Encoding: binary'); //Transfert en binaire (fichier).
header('Content-Disposition: attachment; filename="archive.zip"'); //Nom du fichier.
header('Content-Length: '.filesize($archive_name)); //Taille du fichier.
readfile($archive_name);
$output_string=ob_get_contents();
ob_end_clean();
return $output_string;
?>
Если вы можете помочь мне, не стесняйтесь попробовать!
С наилучшими пожеланиями
последняя строка, где у вас есть
return $output_string;
так должно быть
echo $output_string;
также, хотя в этом случае кажется, что это не влияет на ваш код, но имейте в виду, что буферизация вывода не буферизует ваши вызовы header (), они отправляются немедленно. Увидеть php страница об этом:
Эта функция включает буферизацию вывода. Пока активна буферизация вывода, из сценария не отправляется вывод (кроме заголовков), вместо этого вывод хранится во внутреннем буфере.
Других решений пока нет …