2012-03-28 50 views
3

我試圖從zip文件中檢索文件夾名稱。 我寫了這個簡單的功能:只能從一個zip文件檢索文件夾名稱與PHP?

<?php 
class zipadmin{ 
    private $filename ; 
    private $folder ; 
    public function __construct($filename,$folder){ 
     $this->zip = new ZipArchive; 
     $this->file = $filename ; 
     $this->folder = $folder ; 
    } 
    public function listzip(){ 
    if ($this->zip->open($this->file) == TRUE) { 
     $info = $this->zip->statIndex(0); 
     $output = str_replace('/','',$info['name']); 
     return $output; 
     } 
    } 
} 

問題,如果壓縮文件夾中包含未包括它返回的所有文件名的文件夾中的其他文件。 我需要它僅返回文件夾名稱並放棄任何文件名。

回答

5

您可以嘗試檢查$info['crc']何時等於零。

class zipadmin{ 

    private $file; 
    private $folder; 
    private $zip; 

    public function __construct($filename, $folder) { 
    $this->zip = new ZipArchive; 
    $this->file = $filename ; 
    $this->folder = $folder ; 
    } 

    public function listzip() { 
    $res = false; 
    if ($this->zip->open($this->folder . $this->file) == TRUE) { 
     $i = 0; 
     while ($info = $this->zip->statIndex($i)) { 
     if ($info['crc'] == 0 && preg_match('#^[^/]*?/$#', $info['name'])) 
      $res[] = preg_replace('#^([^/]*?)/$#', '$1', $info['name']); 
     $i++; 
     } 
     } 
    return $res; 
    } 

} 

用例:

$z = new zipadmin('test.zip', './'); // test.zip in my example is in same folder 
print_r($z->listzip()); 

輸出(僅適用於根目錄的數組):

Array 
(
    [0] => folder1 
    [1] => folder2 
    [2] => folder3 
    [3] => folder4 
) 

在我test.zip存檔我在根目錄下幾個文件檔案和4個目錄folder1,folder2,folder3folder4,裏面有一些文件和子目錄。針對無文件夾存檔的運行方法返回布爾型false

更新:

  • 固定的正則表達式匹配第一個斜槓前/一切。
+0

確定,如果我想返回迪爾斯唯一沒有子目錄 – Marco 2012-03-28 10:57:29

+0

@Marco看到更新 – Wh1T3h4Ck5 2012-03-28 11:05:50

+0

警告:ZipArchive :: statIndex()[ziparchive.statindex]:無效的或者未初始化郵編對象 – Marco 2012-03-28 11:20:11

相關問題