使用php仅从zip文件中检索文件夹名称


retrieve folders names only from a zip file with php?

我正在尝试从zip文件中检索文件夹名称。我写了一个简单的函数:

<?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;
        }
    }
}

如果zip文件夹包含文件夹中未包含的其他文件,则会返回所有文件名。我需要它只返回文件夹名称并放弃任何文件名。

您可以尝试检查$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个目录folder1folder2folder3folder4,其中有一些文件和子目录。对没有文件夹的归档运行方法会返回布尔值false

更新:

  • 修复了正则表达式模式以匹配第一个斜杠/之前的所有内容