没有root的ZIP文件夹

时间:2013-10-15 01:37:19

标签: php zip directory

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

中的文件

的MyScript

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

功能ZIP

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

感谢所有

1 个答案:

答案 0 :(得分:0)

问题是 - 您的工作目录(由$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__