我的代码会创建一个ZIP文件,并将其下载到此ZIP文件夹中,并存在一些图像。
它做得很好,但问题是我下载并解压缩此文件夹后,所有路径文件夹也成为我的代码:
$id = $row['id'];
$doc_name = $row['doc_name'];
$file_names = explode(',',$doc_name);
$file_path = $_ROOT_REQUIRE."uploads/document/";
$archive_file_name = "demo.zip";
$zip = new ZipArchive($archive_file_name);
if ($zip->open($archive_file_name, ZIPARCHIVE::CREATE ) !== TRUE) {
echo "cannot open <$archive_file_name>\n";
exit("cannot open <$archive_file_name>\n");
}
foreach ($file_names as $files) {
if ($files !== '') {
$zip->addFile("$files", basename($files));
}
}
$zip->close();
header('Content-type: application/zip');
header('Content-Disposition: attachment; filename="'.basename($archive_file_name).'"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: '.filesize($archive_file_name));
header('Cache-Control: private');
ob_clean();
flush();
readfile(basename($archive_file_name));
exit;
答案 0 :(得分:1)
你的代码看起来很好。 只需替换你的Foreach循环。
foreach ($files as $file)
{
$file = str_replace('\\', '/', $file);
if(filetype($file) == 'file') {
$zip->addFile( $file, pathinfo( $file, PATHINFO_BASENAME ) );
}
}
它应该是有效的 感谢
答案 1 :(得分:0)
有点不清楚为什么会发生这种情况,看看这一行:
$zip->addFile("$files", basename($files));
为什么"
周围有$files
引号?我建议将其更改为:
$zip->addFile($files, basename($files));
答案 2 :(得分:0)
这些是我所做的改变,现在效果很好。谢谢大家。
$overwrite = true;
if($zip->open($archive_file_name,$overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true)
这个较大的部分:
foreach ($file_names as $file) {
$files = $file_path.$file;
$files = str_replace('\\', '/', $files);
if(filetype($files) == 'file') {
$zip->addFile( $files, pathinfo( $files, PATHINFO_BASENAME ) );
}
}