$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循环中的目录(如何?)或者我是否需要在数组上运行搜索并查找文件夹然后取消设置(如何?)?
感谢您的帮助
答案 0 :(得分:2)
你的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);
答案 1 :(得分: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'];
}
}
答案 2 :(得分: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'];
}
}
答案 3 :(得分: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>' ;
}