• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • ZipArchive::getFromIndex()

    (PHP 5 >= 5.2.0, PHP 7, PECL zip >= 1.1.0)

    Returns the entry contents using its index

    说明

    ZipArchive::getFromIndex(int $index[,int $length= 0[,int $flags]]): string

    Returns the entry contents using its index.

    参数

    $index

    Index of the entry

    $length

    The length to be read from the entry. If0, 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.

    范例

    Get the file contents

    <?php
    $zip = new ZipArchive;
    if ($zip->open('test.zip') === TRUE) {
        echo $zip->getFromIndex(2);
        $zip->close();
    } else {
        echo 'failed';
    }
    ?>
    

    参见

    • ZipArchive::getFromName() Returns the entry contents using its name
    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.
    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
    Note, length is in characters and not bytes.
    Note that getFromIndex returns false for directories.