我使用标准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');
}
答案 0 :(得分:10)
我刚刚遇到一个非常类似的问题,其中下载的zip文件已损坏,这就解决了我的问题:
我在ob_end_clean()
行之前调用$this->zip->download()
函数。
答案 1 :(得分:3)
据我所知和codeigniter's documentation说的话:
$path = '/var/www/html/uploads/'.$unique.'/';
<强> $this->zip->read_dir($path)
强>
允许您压缩服务器上某处已存在的文件夹(及其内容)。提供目录的文件路径,zip类将递归读取它并将其重新创建为Zip存档。 所提供路径中包含的所有文件将被编码,其中包含的任何子文件夹。
基本上你创建了一个zip,其中包含从/var
开始到$unique
文件夹中的文件结尾的所有内容,这肯定是错误的......
我建议将第二个参数设置为false,因为文档指定:
If you want the tree preceding the target folder to be ignored you can pass FALSE (boolean) in the second parameter.
<强> $this->zip->read_dir($path, FALSE)
强>
这将创建一个内置文件夹“$unique
”的ZIP,然后在其中正确存储所有子文件夹,但将不包含文件夹{{1} }。
我还建议/建议,为了更好地控制数据,我相信更少的资源,使用:
/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
无效。
$this->zip->read_dir()
答案 2 :(得分:0)
使用fopen代替写文件尝试使用“$ this-&gt; zip-&gt; add_data($ text);”并确保指向的目录(子目录)$ path没有任何软链接(快捷方式)文件。
除此尝试外,不要在zip文件中包含空文件夹,有时会产生这些问题。
答案 3 :(得分:0)
我有类似的问题。每当我创建新的zip文件并解压缩 .zip 文件时,新文件就会创建为 .cpgz 。这是由于我的zip文件无法正确创建而发生的。意味着它创建了损坏的zip文件。
同时我得到致命错误:允许的内存大小为134217728字节耗尽(试图分配262144字节)错误。一旦我解决了这个胎儿错误,我的zip和解压缩问题就解决了。
我解决了以下错误
致命错误:允许的内存大小为134217728字节耗尽(尝试过 分配262144字节)
添加到index.php
ini_set('memory_limit',' - 1');