web-dev-qa-db-ja.com

PHPでは、Zipファイルのコンテンツを最初に抽出せずに検査することはできますか?

PHPでZipArchiveクラスを見て、Zipファイルを読み取ることができるようにしました。しかし、最初にファイルを抽出せずにコンテンツを反復する方法があるかどうか疑問に思っています

29
Roman

http://www.php.net/ziparchive のコメントとして:

次のコードを使用して、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 ); 
}
?>
53
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

このようにして問題を解決しました。

$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