PHP - 在打开时创建并下载 ZipArchive returns CPGZ
PHP - Create and download ZipArchive returns CPGZ when opening
该函数似乎没有正确创建 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);
}
您可以使用 dirname(__FILE__)
- 它 return 您当前 php 脚本的绝对路径,制作 var_dump( dirname(__FILE__) )
以查看它给您的内容,然后使用 ../
或 /folders/..
到您的附件目录
所以你的 $zipname
将类似于 $zipname = dirname(__FILE__) .'/../some_folders/attachements/attachments.zip'
;
并确保该目录可由 www-data
用户写入或仅 chmod
它 0777
在任何情况下
__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 ..."
该函数似乎没有正确创建 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);
}
您可以使用 dirname(__FILE__)
- 它 return 您当前 php 脚本的绝对路径,制作 var_dump( dirname(__FILE__) )
以查看它给您的内容,然后使用 ../
或 /folders/..
到您的附件目录
所以你的 $zipname
将类似于 $zipname = dirname(__FILE__) .'/../some_folders/attachements/attachments.zip'
;
并确保该目录可由 www-data
用户写入或仅 chmod
它 0777
在任何情况下
__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 ..."