2012-03-28 109 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

相关问题