For detecting folders use function ::getNameIndex:
//$zip = ZipArchive::open()
$entry = $zip->getNameIndex($i);
$isDir = (substr($entry, -1, 1) == '/');
Thanks to Alex Howansky @ http://stackoverflow.com/a/19299626/2747584(PHP 5 >= 5.2.0, PHP 7, PHP 8, PECL zip >= 1.1.0)
ZipArchive::getFromIndex — İndisi belirtilen girdinin içeriğini döndürür
İndisi belirtilen girdinin içeriğini döndürür.
indisGirdi indisi.
uzunluk
       Girdiden okunacak uzunluk. 0 belirtilirse,
       tüm girdi okunur.
      
seçeneklerArşivi açmakta kullanılacak seçenekler, Aşağıdaki sabitler VEYAlanarak belirtilir:
   Başarısızlık durumunda false aksi takdirde girdinin içeriği döner.
  
Örnek 1 - Dosya içeriğini basmak
<?php
$zip = new ZipArchive;
if ($zip->open('test.zip') === TRUE) {
    echo $zip->getFromIndex(2);
    $zip->close();
} else {
    echo 'olmadı';
}
?>For detecting folders use function ::getNameIndex:
//$zip = ZipArchive::open()
$entry = $zip->getNameIndex($i);
$isDir = (substr($entry, -1, 1) == '/');
Thanks to Alex Howansky @ http://stackoverflow.com/a/19299626/2747584Unlike what "jana.vasseru" said 7 years ago, this method does not return FALSE for folders (anymore?). It seems that there is no way to find out if an entry is a directory of file.both getFromIndex and getFromName leak memory. Beware specially if you use them inside a long running loop. Even closing and re-opening the zip file doesn't help.