web-dev-qa-db-fra.com

Dans PHP est-il possible d'inspecter le contenu d'un fichier Zip sans en extraire d'abord le contenu?

J'ai vu la classe ZipArchive dans PHP qui vous permet de lire des fichiers Zip. Mais je me demande s’il existe un moyen de parcourir son contenu sans extraire d’abord le fichier.

25
Roman

Tel que trouvé sur http://www.php.net/ziparchive :

Le code suivant peut être utilisé pour obtenir une liste de tous les noms de fichiers dans un fichier Zip. 

<?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 ); 
}
?>
51
deceze

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);
}
?>
14
Jerem

J'ai résolu le problème comme ça.

$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);
0
Marvin Collins