创建一个zip文件并下载它错误

时间:2013-06-07 03:25:38

标签: php codeigniter

我试图通过在本地服务器上创建zip文件来下载一些文件。该文件以zip格式下载,但是当我尝试提取它时,它会给我错误:

  

找不到中心目录签名。这个文件不是   一个zip文件,或者它构成一个多部分存档的磁盘。在里面   后一种情况将找到中央目录和zip文件注释   在此存档的最后一个磁盘上。

这是我正在使用的代码:

function download_gallery($id) {
        $this->load->library('zip');

        $path = '/uploads/post/' . $id;

        $this->zip->read_dir($path, FALSE);
        $filename = $id . '.zip';

// http headers for zip downloads
        header("Pragma: public");
        header("Expires: 0");
        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
        header("Cache-Control: public");
        header("Content-Description: File Transfer");
        header('Content-Type: application/zip'); // mime type
        header('Content-Disposition: attachment;filename="' . $filename . '"'); // tell browser what's the file name
        header('Cache-Control: max-age=0'); // no cache
        header("Content-Transfer-Encoding: binary");
        header("Content-Length: " . filesize($path, $filename));

        // Download the file to your desktop. Name it "my_backup.zip"
        $this->zip->download($filename);
    }

我检查了传入函数的所有变量的值,一切都很好。

顺便说一下,我正在使用codeigniter。

1 个答案:

答案 0 :(得分:1)

我看到三个错误。

您永远不会致电$this->zip->archive($filename);,因此zip文件随时都不存在。

filesize($path, $filename)使用此功能是错误的。 filesize只需要一个参数。

我相信$this->zip->download($filename);已经为下载设置了所需的标题,没有必要自己这样做。