【问题标题】:How to get the zip file's directory structure in PHP?如何在 PHP 中获取 zip 文件的目录结构?
【发布时间】:2013-09-20 09:05:35
【问题描述】:

zipfile.zip 文件的目录结构将是

文件夹 A -> 文件夹 B -> 文件夹 C -> image1.png, image2.png, image3.png

以下是我尝试过的代码。但它没有回应任何东西。

$zip = zip_open('zipfile.zip'); 
while($zip_entry = zip_read($zip)){
    $filename = zip_entry_name($zip_entry);
    echo $filename."<br/>"; 
}

作为O/P,我想要的只是

文件夹数组 => A,B,C

FileArray => image1.png, image2.png, image3.png.

是否可以将 O/P 作为两个数组来获取?如何使用 PHP zip 命令区分文件和文件夹?

如何使用 php 读取此目录结构?

【问题讨论】:

    标签: php zip directory directory-structure zipfile


    【解决方案1】:
    $zip = zip_open('zipfile.zip'); 
    
    if ($zip) {
        while ($zip_entry = zip_read($zip)) {
            echo "Name:               " . zip_entry_name($zip_entry) . "\n";
            echo "Actual Filesize:    " . zip_entry_filesize($zip_entry) . "\n";
            echo "Compressed Size:    " . zip_entry_compressedsize($zip_entry) . "\n";
            echo "Compression Method: " . zip_entry_compressionmethod($zip_entry) . "\n";
    
            if (zip_entry_open($zip, $zip_entry, "r")) {
                echo "File Contents:\n";
                $buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
                echo "$buf\n";
    
                zip_entry_close($zip_entry);
            }
            echo "\n";
    
        }
    
        zip_close($zip);
    
    }
    

    摘自http://www.php.net/manual/en/zip.examples.php

    注意

    但这不支持判断它是文件夹还是文件的方法。

    【讨论】:

      【解决方案2】:

      我不太确定您想要什么,但这是一个猜测。如果找到的条目的最后一个字符是/,您能否测试它是否是一个文件夹?

      新建文件夹.zip 内容

      New folder/New folder/New folder/New Text Document (2).txt
      New folder/New folder/New folder/New Text Document.txt
      New folder/New folder/New Text Document.txt
      

      代码

      $zip = zip_open('New folder.zip'); 
      $dirs = $files = array();
      
      if ($zip) {
          while ($zip_entry = zip_read($zip)) {
              $zen = zip_entry_name($zip_entry);
              $is_dir = substr($zen, -1) == DIRECTORY_SEPARATOR;
      
              $zen_splitted = explode(DIRECTORY_SEPARATOR, $zen);
              if ($is_dir) {
      
                  $dirs[]  = $zen_splitted[count($zen_splitted)-2];
              } else {
                  $files[]  = $zen_splitted[count($zen_splitted)-1];
              }
          }
      
          zip_close($zip);
      
      }
      
      print_r($dirs);
      print_r($files);
      

      输出

      Array
      (
          [0] => New folder
          [1] => New folder
          [2] => New folder
          [3] => New folder (2)
      )
      Array
      (
          [0] => New Text Document (2).txt
          [1] => New Text Document.txt
          [2] => New Text Document.txt
      )
      

      【讨论】:

      • 嗨,我试试你的代码,但它是在 zip 文件中创建文件夹??
      • @TheCrazyProfessor 什么意思?
      猜你喜欢
      • 2015-02-14
      • 1970-01-01
      • 2013-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多