在使用php zip存档在Windows中创建的zip文件时,在Linux上解压缩zip文件时,目录结构会混乱

时间:2016-10-29 17:34:13

标签: php linux zipfile

在使用php ZIPArchive在Windows中创建的zip文件时,在Linux上解压缩目录结构时搞砸了

Zip creation   on Windows ---> Unzip on Windows --> No isuses 
Zip creation   on Linux ---> Unzip on Linux --> No isuses 
Zip creation   on Windows ---> Unzip on Linux ---> Files are not unziping to right directories 

要压缩的文件夹的结构

   b2c 
     --> data 
            d.xml 
     ---> metatada 
            m.xml 

在Windows平台上使用以下代码创建一个zip。现在在Linux上解压缩。这是结构,而不是将d.xml放在b2c \ data下,而是创建一个文件data \ d.xml。

   b2c 
      data\d.xml  
      metadata\m.xml

源代码

<?php

define('DS', DIRECTORY_SEPARATOR);
/*
  $folder_to_zip = 'c:'. DS .'temp'. DS . 'b2c';
  $zip_file      = 'c:' . DS . 'temp' .DS . 'b2c'. DS . 'b2c.zip';
  create_zip($folder_to_zip,  $zip_file);

  $folder_to_unzip = 'c:' . DS . 'temp1';

  $src_zip_file   = 'c:'. DS . 'temp' . DS . 'b2c' . DS . 'b2c.zip';
  unzip_file($folder_to_unzip,$src_zip_file);
  */

  $folder_to_zip = DS. 'home' . DS . 'bitnami' .  DS . 'temp' . DS .  'b2c';
  $zip_file      = DS. 'home' . DS . 'bitnami' . DS . 'temp' . DS .  'b2c'. DS . 'b2c.zip';
  create_zip($folder_to_zip,  $zip_file);

  $folder_to_unzip = DS. 'home' . DS . 'bitnami' . DS . 'temp1' . DS .  'b2c';
  $src_zip_file   = DS. 'home' . DS . 'bitnami' . DS . 'temp' . DS .  'b2c'. DS . 'b2c.zip';

  unzip_file($folder_to_unzip,$src_zip_file);


function create_zip($folder_to_zip,  $zip_file) {
  $rootPath = realpath($folder_to_zip);
  $zip = new ZipArchive();
    $zip->open($zip_file, ZipArchive::CREATE | ZipArchive::OVERWRITE);
    // Create recursive directory iterator /** @var SplFileInfo[] $files */
    $files = new RecursiveIteratorIterator(
                new RecursiveDirectoryIterator($rootPath),
                    RecursiveIteratorIterator::LEAVES_ONLY);
    foreach ($files as $name => $file)
    {
    // Skip directories (they would be added automatically)
    if (!$file->isDir())
    {
        // Get real and relative path for current file
        $filePath = $file->getRealPath();
        $relativePath = substr($filePath, strlen($rootPath) + 1);        
        $zip->addFile($filePath, $relativePath);
     }      
    }
    $zip->close();
    }

function unzip_file($folder_to_unzip,$src_zip_file) {

  $zip = new ZipArchive;
        $res = $zip->open($src_zip_file);
        if ($res === TRUE) {
          $zip->extractTo($folder_to_unzip);
          $zip->close();
          return TRUE ;
        } else {
          return FALSE ;
        }
}       

0 个答案:

没有答案