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

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

    Get a file handler to the entry defined by its name(read only)

    说明

    ZipArchive::getStream(string $name): resource

    Get a file handler to the entry defined by its name. For now it only supports read operations.

    参数

    $name

    The name of the entry to use.

    返回值

    Returns a file pointer(resource)on success 或者在失败时返回FALSE.

    范例

    Get the entry contents with fread() and store it

    <?php
    $contents = '';
    $z = new ZipArchive();
    if ($z->open('test.zip')) {
        $fp = $z->getStream('test');
        if(!$fp) exit("failed\n");
        while (!feof($fp)) {
            $contents .= fread($fp, 2);
        }
        fclose($fp);
        file_put_contents('t',$contents);
        echo "done.\n";
    }
    ?>
    

    Same as the previous example but with fopen() and the zip stream wrapper

    <?php
    $contents = '';
    $fp = fopen('zip://' . dirname(__FILE__) . '/test.zip#test', 'r');
    if (!$fp) {
        exit("cannot open\n");
    }
    while (!feof($fp)) {
        $contents .= fread($fp, 2);
    }
    echo "$contents\n";
    fclose($fp);
    echo "done.\n";
    ?>
    

    Stream wrapper and image, can be used with the xml function as well

    <?php
    $im = imagecreatefromgif('zip://' . dirname(__FILE__) . '/test_im.zip#pear_item.gif');
    imagepng($im, 'a.png');
    ?>
    
    I experienced problems using fread to read the content of the zip when the file was PDF. Using stream_get_contents instead solved the problem.