Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP zip存档添加了额外的文件夹_Php_Zip_Directory_Absolute - Fatal编程技术网

PHP 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

我有一段代码,它生成一个.zip存档,其中包含给定文件夹中的所有文件和文件夹。看起来是这样的:

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存档的根目录中。