2013-10-15 93 views
1

我有一個腳本在壓縮文件夾「output」的內容時被調用,但當我嘗試加載位於文件夾www/projectname中的文件夾「Outpup」的內容時, ,I在C盤根目錄下壓縮文件:\ZIP文件夾whitou根

的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(); 
} 

我需要僅壓縮文件夾的內容「出來放」,但在拉鍊我得到以下嵌套文件夾

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

我想找到裏面的zip文件只有子文件夾‘輸出’

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

感謝所有

+0

嘗試將目標作爲非源文件夾。如果它們與您一樣,可能會出現問題。 – Lizz

+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__

+0

抱歉,但我不明白在哪裏應用您的建議 –

+0

@MarcoAttanasio作爲腳本的第一行,例如。 –

+0

我試過了,但仍然不起作用 –