0

ローカル サーバーに zip ファイルを作成して、いくつかのファイルをダウンロードしようとしています。ファイルは zip 形式でダウンロードされますが、解凍しようとすると次のエラーが表示されます。

中央ディレクトリの終わりの署名が見つかりません。このファイルは zip ファイルではないか、マルチパート アーカイブの 1 つのディスクを構成しています。後者の場合、中央ディレクトリと 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を使用しています。

4

1 に答える 1

1

間違いが 3 つあります。

呼び出すことはない$this->zip->archive($filename);ため、zip ファイルは常に存在しません。

filesize($path, $filename)この関数の使い方が間違っています。filesizeパラメータは 1 つだけです。

ダウンロードに必要なヘッダーは$this->zip->download($filename);既にセットアップされていると思います。自分で行う必要はありません。

于 2013-06-07T03:38:50.667 に答える