1

我有一个脚本在压缩文件夹“输出”的内容时被调用,但是当我尝试加载位于文件夹 www / projectname 中的文件夹“Outpup”的内容时,我压缩根目录 C 中的文件:\

我的脚本

$rootpath="./Output";
$destinazione="./Output/lista.zip";
 Zip($rootpath,$destinazione);

功能邮编

function Zip($source, $destination)

{

    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 (is_dir($source) === true)
    {
        $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST);

        foreach ($files as $file)
        {
            $file = str_replace('\\', '/', $file);

            // Ignore "." and ".." folders
            if( in_array(substr($file, strrpos($file, '/')+1), array('.', '..')) )
                continue;

            $file = realpath($file);

            if (is_dir($file) === true)
            {
                $zip->addEmptyDir(str_replace($source . '/', '', $file . '/'));
            }
            else if (is_file($file) === true)
            {
                $zip->addFromString(str_replace($source . '/', '', $file), file_get_contents($file));
            }
        }
    }
    else if (is_file($source) === true)
    {
        $zip->addFromString(basename($source), file_get_contents($source));
    }

    return $zip->close();
}

我只需要压缩文件夹“输出”的内容,但在 zip 中我得到以下嵌套文件夹

c:\
└─ Program Files (x86)
 └─  www
  └─ Separalista
   └─output
     ├─ folder1
     │ └─ file.csv
     └─ folder2 
       └─ file.csv

我想在 zip 文件中找到只有子文件夹“输出”

output
  ├─ folder1
  │  └─ file.csv
  └─ folder2 
     └─ file.csv

谢谢大家

4

1 回答 1

0

问题是 - 你的工作目录,由你的 dot 表示$rootpath,可以是任何东西,没有什么可以让它成为脚本自己的目录。要将工作目录更改为脚本的目录,请使用:

chdir( dirname ( realpath ( __FILE__ ) ) );

或者,在 PHP 5.3.0 或更高版本中,只需

chdir( __DIR__ );

在脚本的开头。

如果这不起作用,您必须进行一些更深入的更改。将脚本的路径直接附加到包含目录的变量,如下所示:

$rootpath = __DIR__ . '/Output';
$destinazione = $rootpath . '/lista.zip';

以上应该可以工作,假设您的文件位于项目的根目录中。如果不是,请相应修改$rootpath。在 PHP 5.3.0 之前dirname ( realpath ( __FILE__ ) )的版本中,使用__DIR__.

于 2013-10-15T12:30:35.737 回答