我正在努力为用户提供在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;
?>
如果你可以帮助我,请不要犹豫! 最好的问候
答案 0 :(得分:0)
最后一行,你有
return $output_string;
应该是
echo $output_string;
另外,虽然在这种情况下它似乎不会影响您的代码,但请记住,输出缓冲不会缓冲您的header()调用,它们会立即发送。请参阅php page about it:
此功能将打开输出缓冲。当输出缓冲处于活动状态时,不会从脚本(除标题之外)发送输出,而是将输出存储在内部缓冲区中。