该功能似乎没有正确创建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);
}
答案 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 ..."
的前缀