Wordpress - Zip档案强制下载

时间:2014-12-22 21:45:49

标签: php wordpress zip archive

我正在努力为用户提供在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;

?>

如果你可以帮助我,请不要犹豫! 最好的问候

1 个答案:

答案 0 :(得分:0)

最后一行,你有

return $output_string;

应该是

echo $output_string;

另外,虽然在这种情况下它似乎不会影响您的代码,但请记住,输出缓冲不会缓冲您的header()调用,它们会立即发送。请参阅php page about it

  

此功能将打开输出缓冲。当输出缓冲处于活动状态时,不会从脚本(除标题之外)发送输出,而是将输出存储在内部缓冲区中。