Codeigniter ZIP文件下载已损坏

wko9yo5t  于 2022-12-07  发布在  其他
关注(0)|答案(5)|浏览(201)

我正在使用标准CI zip库读取目录并创建zip文件以供下载,但是当我在Windows中测试时,我得到:

在OS X中,zip解压缩一个cpgz文件,然后解压缩为zip文件-无限
我的CI功能:

public function downloadPackage($unique) {
    $this->load->library('zip');
    $text = $this->syndication_m->getTextForContent($unique);

    $path = '/var/www/html/uploads/'.$unique.'/';

    if(file_exists($path."copy-".$unique.".txt")) {
        unlink($path."copy-".$unique.".txt");
        $fp = fopen($path."copy-".$unique.".txt","wb");
        fwrite($fp,$text);
        fclose($fp);
    }

    $this->zip->read_dir($path);
    $this->zip->download('dl-'.$unique.'.zip');
}

有谁能帮我修复或建议在这里做什么?谢谢

编辑

public function downloadPackage($unique) {
    $this->load->library('zip');
    $path = '/var/www/html/uploads/'.$unique.'/';

    $text = $this->syndication_m->getTextForContent($unique);
    $this->zip->read_dir($path, TRUE);
    $this->zip->add_data('copy-'.$unique.'.txt', $text->synd_text);
    $this->zip->download('dl-'.$unique.'.zip');
}
1szpjjfi

1szpjjfi1#

我刚刚遇到了一个非常类似的问题,下载的zip文件被损坏,这是什么解决了我的问题:
我在$this->zip->download()行之前调用了ob_end_clean()函数。

zengzsys

zengzsys2#

据我所知和codeigniter's documentation所说:
$path = '/var/www/html/uploads/'.$unique.'/';

      • 一个月一个月**
  • 允许您压缩服务器上某个位置已存在的文件夹(及其内容)。提供目录的文件路径,zip类将递归读取该路径并将其重新创建为Zip存档。所提供路径中包含的所有文件都将被编码,其中包含的任何子文件夹也将被编码。*

基本上,您正在创建一个zip文件夹,从/var开始,以$unique文件夹中的文件结束,肯定会出错...
我建议将第二个参数设置为false,如文档中所指定的:

  • 一米四六 *
      • $this->zip->read_dir($path, FALSE)**
  • 这将创建一个ZIP,其中包含文件夹"$unique",然后所有子文件夹都正确存储在其中,但不会包括文件夹/var/www/html/uploads。*

为了更好地控制数据,我还建议/推荐使用以下资源:

  • $this->zip->add_data(),而不是fopen()$this->zip->read_dir()

示例:

public function downloadPackage($unique) {
    $this->load->library('zip');

    $text = $this->syndication_m->getTextForContent($unique);

    $this->zip->add_data('copy-'.$unique.'.txt', $text);
    $this->zip->download('dl-'.$unique.'.zip');
}
    • 注意**:* 不要在调用此函数的控制器中显示任何数据,因为它会发送各种服务器头,这些头会导致下载发生,并将文件视为二进制文件。*

除非您想将$unuqie目录中的任何文件添加到zip中,否则$this->zip->read_dir()没有任何用处。

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Testing extends CI_Controller {
    public function downloadPackage($unique = '') {
        $this->load->library('zip');

        $unique = '4ts5yegq;';
        $text = 'I am zorro ...';

        $this->zip->add_data('copy-'.$unique.'.txt', $text);
        $this->zip->download('dl-'.$unique.'.zip');
    }
}
tnkciper

tnkciper3#

在写文件的地方使用fopen尝试使用“$this-〉zip-〉add_data($text);“并确保$path指向的目录(子目录)没有任何软链接(快捷方式)文件。
除了这种尝试,不包括空文件夹在zip文件有时它会产生这些问题。

3phpmpom

3phpmpom4#

我有类似的问题。每当我正在创建新的zip文件和解压**.zip文件,新文件正在创建为.cpgz**。这是由于我的zip文件没有正确创建发生。这意味着它是创建为损坏的zip文件。
同时我得到**致命错误:允许的内存大小为134217728字节已耗尽(尝试分配262144字节)**错误。一旦我解决了这个胎儿错误,我的压缩和解压问题得到解决。
我解决了以下错误
致命错误:已用尽允许的134217728字节内存大小(尝试分配262144字节)
添加到index.php

ini_set('内存限制','-1');

balp4ylt

balp4ylt5#

使用ob_end_clean()函数删除最上面的输出缓冲区及其所有内容。函数。

相关问题