41

I have seen the ZipArchive class in PHP which lets you read zip files. But I'm wondering if there is a way to iterate though its content without extracting the file first

hakre
  • 193,403
  • 52
  • 435
  • 836
Roman
  • 10,309
  • 17
  • 66
  • 101
  • possible duplicate of [PHP library that can list contents of zip / rar files](http://stackoverflow.com/questions/1524186/php-library-that-can-list-contents-of-zip-rar-files) – Shiplu Mokaddim Mar 22 '12 at 06:42

4 Answers4

77

As found as a comment on http://www.php.net/ziparchive:

The following code can be used to get a list of all the file names in a zip file.

<?php
$za = new ZipArchive(); 

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

for( $i = 0; $i < $za->numFiles; $i++ ){ 
    $stat = $za->statIndex( $i ); 
    print_r( basename( $stat['name'] ) . PHP_EOL ); 
}
?>
deceze
  • 510,633
  • 85
  • 743
  • 889
18

http://www.php.net/manual/en/function.zip-entry-read.php

<?php
$zip = zip_open("test.zip");

if (is_resource($zip))
  {
  while ($zip_entry = zip_read($zip))
    {
    echo "<p>";
    echo "Name: " . zip_entry_name($zip_entry) . "<br />";

    if (zip_entry_open($zip, $zip_entry))
      {
      echo "File Contents:<br/>";
      $contents = zip_entry_read($zip_entry);
      echo "$contents<br />";
      zip_entry_close($zip_entry);
      }
    echo "</p>";
  }

zip_close($zip);
}
?>
Community
  • 1
  • 1
Jerem
  • 460
  • 5
  • 13
0

I solved the problem like this.

$zip = new \ZipArchive();

$zip->open(storage_path('app/'.$request->vrfile));

$name = '';

//looped through the zip files and got each index name of the files
//since I only wanted the first name which is the folder name I break the loop 
//after updating the variable $name with the index name and that's it

    for( $i = 0; $i < $zip->numFiles; $i++ ){
        $filename = $zip->getNameIndex($i);
        var_dump($filename);
        $name =     $filename;
        if ($i == 1){
            break;
        }
    }

    var_dump($name);
Uwe Keim
  • 39,551
  • 56
  • 175
  • 291
Marvin Collins
  • 379
  • 6
  • 14
-8

Repeated Question. Search before posting. PHP library that can list contents of zip / rar files

    <?php

 $rar_file = rar_open('example.rar') or die("Can't open Rar archive");

 $entries = rar_list($rar_file);

 foreach ($entries as $entry) {
     echo 'Filename: ' . $entry->getName() . "\n";
     echo 'Packed size: ' . $entry->getPackedSize() . "\n";
     echo 'Unpacked size: ' . $entry->getUnpackedSize() . "\n";

     $entry->extract('/dir/extract/to/');
 }

 rar_close($rar_file);

 ?>
Community
  • 1
  • 1
Divisible
  • 182
  • 1
  • 7
  • 16
    lol so you scold for a duplicate question then subsidize the behavior with an answer. Nice :) –  Mar 22 '12 at 06:42
  • 16
    vote to close duplicate question instead of duplicating answers - you should read the Bible before preaching it. – Repox Mar 22 '12 at 06:51