PHP - 创建和下载ZipArchive在打开时返回CPGZ

时间:2015-12-16 18:02:45

标签: php zip

该功能似乎没有正确创建ZIP文件。下载的文件提示工作正常。但是,打开它时,它只会创建.cpgz格式的副本。

供参考: foreach ($attachments as $file)输出为"/upload/image.jpg"

function downloadAttachment() {
    $zipname = 'attachments.zip';
    $zip = new ZipArchive;
    $zip->open($zipname, ZipArchive::CREATE);
    foreach ($attachments as $file) {
      $fileSrc = $_SERVER['DOCUMENT_ROOT'] . $file["file_attachment"];
      $zip->addFile($fileSrc);
    }
    $zip->close();

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

1 个答案:

答案 0 :(得分:1)

您可以使用dirname(__FILE__) - 它会返回您当前php脚本的绝对路径,让var_dump( dirname(__FILE__) )查看它为您提供的内容,然后使用..//folders/..重新定位到您的附件目录

所以您的$zipname会像$zipname = dirname(__FILE__) .'/../some_folders/attachements/attachments.zip';

并确保www-data用户可以写入该目录,或者chmod只有0777 {/ p>}

__FILE__是PHP的一个神奇常数,你可以在这里查看更多 - http://php.net/manual/en/language.constants.predefined.php

另一个好的做法是在configs.php中的某个位置定义每个php define('ROOT_DIR', "absolute root path of your project");中包含的内容,然后在项目的任何位置使用ROOT_DIR变量作为所有文件夹ROOT_DIR."/folder/file ..."的前缀