PHP关闭zipArchive打印垃圾文本(数据转储)

时间:2016-02-23 17:24:38

标签: php http-headers ziparchive

我一直在努力学习如何在php中正确使用zipArchive功能来创建和下载包含所选文件的zip文件夹。

经过一段时间后,它可以创建zip文件并将其存储在服务器上,但我还没有能够在$ zip-> close()之后自动启动下载。命令它打印垃圾字符的页面和页面,就好像它正在打印zip文件一样。以下是其中的一部分:http://www.abpdigital.com/uploads/Junk%20Text.png

我从这里得到了我的基本代码:http://roshanbh.com.np/2008/09/force-download-mutiple-files-zip-archive-php.html

以及它在我的代码中的显示方式:

function zipFilesAndDownload($file_names,$archive_file_name,$file_path)
    {
        //create the object
        $zip = new ZipArchive();
        //create the file and throw the error if unsuccessful
        if ($zip->open($archive_file_name, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE)!==TRUE)
        {
            exit("cannot open <$archive_file_name>\n");
        }

        //add each files of $file_name array to archive
        foreach($file_names as $files)
        {
            $zip->addFile($file_path.$files,$files);
        }
        $zip->close();

        //THIS IS WHEN THE JUNK TEXT STARTS

        //then send the headers to force download the zip file
        header("Content-type: application/zip");
        header("Content-Disposition: attachment; filename=".$archive_file_name);
        header("Pragma: no-cache");
        header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
        readfile($archive_file_name);
        exit;
    }

有没有人知道可能导致垃圾文本的原因?我错误地使用了标题吗?如有必要,我可以提供更多代码,但我相当确定变量传递是可靠的。我一直在使用Chrome进行测试,但我已经证实IE和Firefox都存在此行为。

[更新]我发现如果我在当前目录的子文件夹中创建zip文件(而不是直接在当​​前目录中),它就不会输出页面上的所有垃圾文本。

现在我的问题更多的是我希望从标题中获取的自动下载功能并非从未有过。任何我应该寻找的错误或事件可能会对错误产生什么影响?

1 个答案:

答案 0 :(得分:0)

标题似乎有问题。显示的有线垃圾只是zip文件中的原始数据。如果正确,请检查 $ archive_file_name 。尝试更改标题如下:

<image>