7
        $za = new ZipArchive();
        $za->open($source);
        for( $i = 0; $i < $za->numFiles; $i++ ){
            $stat = $za->statIndex( $i );
            $items = array( basename( $stat['name'] ) . PHP_EOL );
            foreach($items as $item) {
            echo $item;
            }
        }

此代码将列出 zip 存档中的所有文件,但我想排除文件夹列表。如果数组中的项目是一个文件夹,我想将它从数组中排除但我仍然想列出文件夹内的文件。只是不要在列表中显示文件夹的名称。

有没有一种方法可以检测该项目是否是我的 foreach 循环中的目录(如何?)或者我是否需要在数组上运行搜索并查找文件夹然后取消设置它(如何?)?

谢谢你的帮助

4

4 回答 4

3

你的 foreach 没用。它用一项迭代数组。

无论如何,有两种方法可以检测文件夹。首先,文件夹以“/”结尾。第二个文件夹的大小为 0。

$za = new ZipArchive();
$za->open('zip.zip');
$result_stats = array();
for ($i = 0; $i < $za->numFiles; $i++)
    {
    $stat = $za->statIndex($i);
    if ($stat['size'])
        $result_stats[] = $stat;
    }

echo count($result_stats);
于 2013-06-28T00:33:31.420 回答
0

只需检查文件大小,如果为零,则为文件夹。

    $za = new ZipArchive(); 

    $za->open('zip.zip'); 

    for( $i = 0; $i < $za->numFiles; $i++ ){ 
        $stat = $za->statIndex( $i );
        if($stat['size']!=0){
            echo $stat['name'];
        }

    }
于 2013-10-20T15:16:00.717 回答
0

目录有一个尾部斜杠:

$za = new ZipArchive();
$za->open($source);
for( $i = 0; $i < $za->numFiles; $i++ ){
    $stat = $za->statIndex( $i );
    if(substr($stat['name'], -1) !== '/'){
        echo $stat['name'];
    }
}
于 2018-11-27T12:01:40.303 回答
0

如果您正在寻找一个简单的 PHP 函数来列出文件和文件夹而不是子文件夹,这里有一个简单的精心设计的函数,您可以对其进行测试,看看它是否适合您。

function unzip($path){

  if($path ===  null ) return 'File not found.';
    $zip = new ZipArchive();

   $entryList  = '<ul class="list-group"> ';

   if ($zip->open($path) == TRUE) {
      for ($i = 0; $i < $zip->numFiles; $i++) {

       //set the prerequisit inputs
       $stat =  $zip->statIndex($i); //an array of file statistics or details
       $filename =  $stat['name']; // entry name
       $size =  $stat['size']; //entry size

       //list only folders and file names but not subfolders.
       //when size is zero,its folder, list it, and when entry name
       //doesn't contain the (/), its is a file, list it.

      $isFile  =  strstr($filename, '/') === false;
      $anyFile  = preg_match('/(\..+)$/',$filename);
      $icon = ($anyFile  ? 'fa-file text-info' : 'fa-folder text-warning' );
   
      if($size == 0 || $isFile  ){
          $filename = str_replace('/','',$filename);
          $entryList .='<li class="list-group-item  ">';
          $entryList .=  '<i class="fa '.$icon.' mr-1 "></i>';
          $entryList .='<button class="btn btn-link">'.$filename.'</button></li>';
    }
 }

   $zip->close();
  }

  return $entryList.'</ul>' ;

 }

这是输出: 文件列表

于 2021-02-19T07:31:32.460 回答