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
(No version information available, might only be in Git)
ZipArchive::getFromIndex — Returns the entry contents using its index
$index
[, int $length
= 0
[, int $flags
]] )Returns the entry contents using its index.
index
Index of the entry
length
The length to be read from the entry. If 0, then the entire entry is read.
flags
The flags to use to open the archive. the following values may be ORed to it.
ZipArchive::FL_UNCHANGED
ZipArchive::FL_COMPRESSED
Returns the contents of the entry on success실패 시 FALSE
를 반환합니다.
Example #1 Get the file contents
<?php
$zip = new ZipArchive;
if ($zip->open('test.zip') === TRUE) {
echo $zip->getFromIndex(2);
$zip->close();
} else {
echo 'failed';
}
?>
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
Unlike 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.