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 β ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΏΠΎ Π΅Π³ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡ
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΏΠΎ Π΅Π³ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡ.
indexlen0, ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠΈΡΠ°Π΅ΡΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ.
flagsΠ€Π»Π°Π³ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ Π΄Π»Ρ ΠΎΡΠΊΡΡΡΠΈΡ Π°ΡΡ ΠΈΠ²Π°. ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎ Π½ΠΈΠΆΠ΅ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΏΡΠΈ ΡΡΠΏΠ΅Ρ
Π΅ ΠΈΠ»ΠΈ false, Π΅ΡΠ»ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ°.
ΠΡΠΈΠΌΠ΅Ρ #1 ΠΠΎΠ»ΡΡΠΈΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ°ΠΉΠ»Π°
<?php
$zip = new ZipArchive;
if ($zip->open('test.zip') === TRUE) {
echo $zip->getFromIndex(2);
$zip->close();
} else {
echo 'ΠΎΡΠΈΠ±ΠΊΠ°';
}
?>
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.