PHPでZipArchiveクラスを見て、Zipファイルを読み取ることができるようにしました。しかし、最初にファイルを抽出せずにコンテンツを反復する方法があるかどうか疑問に思っています
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 ); } ?>
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);
}
?>
このようにして問題を解決しました。
$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);