PHP zip存档添加了额外的文件夹
我有一段代码,它生成一个.zip存档,其中包含给定文件夹中的所有文件和文件夹。看起来是这样的:PHP zip存档添加了额外的文件夹,php,zip,directory,absolute,Php,Zip,Directory,Absolute,我有一段代码,它生成一个.zip存档,其中包含给定文件夹中的所有文件和文件夹。看起来是这样的: function zipDirectory($source, $destination, $flag = '') { if (!extension_loaded('zip') || !file_exists($source)) { return false; } $zip = new ZipArchive(); if (!$zip->open($destination, ZIPARCHI
function zipDirectory($source, $destination, $flag = '')
{
if (!extension_loaded('zip') || !file_exists($source))
{
return false;
}
$zip = new ZipArchive();
if (!$zip->open($destination, ZIPARCHIVE::CREATE))
{
return false;
}
$source = str_replace('\\', '/', realpath($source));
if($flag)
{
$flag = basename($source) . '/';
//$zip->addEmptyDir(basename($source) . '/');
}
if (is_dir($source) === true)
{
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST);
foreach ($files as $file)
{
$file = str_replace('\\', '/', realpath($file));
if (is_dir($file) === true)
{
$zip->addEmptyDir(str_replace($source . '/', '', $flag.$file . '/'));
}
else if (is_file($file) === true)
{
$zip->addFromString(str_replace($source . '/', '', $flag.$file), file_get_contents($file));
}
}
}
else if (is_file($source) === true)
{
$zip->addFromString($flag.basename($source), file_get_contents($source));
}
return $zip->close();
}
zipDirectory($downloadID.'/','temp_'.$downloadID.'.zip', false);
$zip_file = 'temp_'.$downloadID.'.zip';
$file_name = basename($zip_file);
header("Content-Type: application/zip");
header("Content-Disposition: attachment; filename=" . $file_name);
header("Content-Length: " . filesize($zip_file)+15);
但是,生成的.zip归档文件最终包含指定的文件夹,以及一个名为C:的额外文件夹,其中包含文件夹,构成指向我的站点根目录的绝对路径。此文件夹链中没有文件
我真的不知道是什么导致了这一切。。。有什么想法吗?非常感谢。您正在使用windows服务器吗?我已经修改了你的脚本,这是最新版本。对我来说,将$downloadID设置为当前目录时,它会起作用。请确定您当前的目录是什么。我用的是linux,我用的是Windows。当我删除str_replace时,所选文件夹将压缩到绝对路径中,而不仅仅是压缩到.zip存档的根目录中。