无法在 codeigniter 中创建 zip 文件

Posted

技术标签:

【中文标题】无法在 codeigniter 中创建 zip 文件【英文标题】:not able to create zip file in codeigniter 【发布时间】:2016-12-13 14:34:53 【问题描述】:

下面是生成多个文件的zip的代码:

<?php 

$file1 = 'D:/xampp/htdocs/pdf/pdffiles/14816393105-annexc-form.pdf';
$file2 = 'D:/xampp/htdocs/pdf/pdffiles/14816393105-resident-form.pdf'

$files = array($file1,$file2);
$zipname = time().'-file.zip';
$zip = new ZipArchive;
$zip->open($zipname, ZipArchive::CREATE);
foreach ($files as $file) 
   $zip->addFile($file);

$zip->close();

header('Content-Type: application/zip');
header('Content-disposition: attachment; filename='.$zipname);
header('Content-Length: ' . filesize($zipname));
readfile($zipname);

?>

此代码确实会创建 zip 文件,但它已损坏。

编辑:

zip file is created but if i extract it then it is from the D:/ drive. Means zip file contains this:xampp\htdocs\pd‌​f\pdffiles\file1.pdf

【问题讨论】:

1 - 您服务器上的文件(下载前)是否也损坏了? 2 - 如果您在addFile 方法中添加第二个参数(文件名),它是否有效? 用文本编辑器打开文件,检查顶部是否有空行。如果是这样,如果您删除它们,它是否会正常化?在这种情况下,请检查您的 php 文件以查看它们在何处返回空行。 @rap-2-h 不,它没有损坏。 2 - 如果您在 addFile 方法中添加第二个参数(文件名),它是否有效? - 是什么意思? @PathikVejani $zip->addFile($file, 'foo.pdf'); @rap-2-h $fileit 自身文件名 【参考方案1】:

您可以在addFile 方法中指定文件名。这并不明显,因为周围没有明显的示例,但是您可以使用$localname(第二个参数)来定义和控制 zip 中的文件/目录结构。如果您不希望文件包含在其绝对目录树中,请使用它。

这是一个使用basename 的工作示例:

$file1 = 'D:/xampp/htdocs/pdf/pdffiles/14816393105-annexc-form.pdf';

// ...

$zip->addFile($file1, basename($file1));

basename 返回路径的尾随名称组件,因此它只会保留 14816393105-annexc-form.pdf 并将其添加到您的 zip 中。

【讨论】:

是的..这是解决方案..以及如何下载文件? @PathikVejani 你也可以使用FCPATH . 'pdffiles/14816393105-annexc-form.pdf'。这是绝对路径可以节省输入完整路径。

以上是关于无法在 codeigniter 中创建 zip 文件的主要内容,如果未能解决你的问题,请参考以下文章

Archive::Zip 无法在 Perl 中创建 Zip 对象

在 CodeIgniter 控制器中创建函数

需要帮助在 codeigniter 中创建自动填充

在 C++ 中创建一个 zip 存档

想要在 codeigniter 中创建动态子域?

如何在 zip 文件归档器中创建文件夹 - node.js