Php 创建一个zip文件并下载它

Php 创建一个zip文件并下载它,php,codeigniter,Php,Codeigniter,我试图通过在本地服务器上创建zip文件来下载一些文件。该文件是以zip格式下载的,但当我尝试提取它时,会出现以下错误: 找不到中央目录签名的结尾。此文件不是 zip文件,或者它构成多部分归档的一个磁盘。在 后一种情况下,将找到中心目录和zip文件注释 在此存档的最后一个磁盘上 这是我为此使用的代码: function download_gallery($id) { $this->load->library('zip'); $path = '/uplo

我试图通过在本地服务器上创建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。我看到三个错误

您从不调用
$this->zip->archive($filename)
因此zip文件在任何时候都不存在

filesize($path,$filename)
此函数的用法不正确<代码>文件大小只接受一个参数


我相信
$this->zip->download($filename)已经为下载设置了所需的标题,无需自己进行设置

我不明白你说的第一个和第二个错误是什么意思。我实际上是想在那里下载一个图像目录。谢谢你的反馈,我会尽力弄明白你说了什么。你告诉zip库你想压缩什么文件,但你从来没有告诉它把zip文件保存在什么地方。您正在编写的zip文件从未实际创建过。文件大小,好吧,只要看看PHP手册,我做了zip->archive()的事情,但我仍然有这个问题。我在web app文件夹中创建的存档工作正常。只是下载的版本有问题