genkgo/archive-stream

将ZIP文件作为PSR-7消息流式传输(内存高效)

3.4.0 2023-12-04 13:33 UTC

README

将ZIP文件作为PSR-7消息流式传输(内存高效)。

workflow code check

安装

使用composer将包添加到依赖项中。支持所有接收安全更新的PHP版本

composer require genkgo/archive-stream

对于PHP 7.3,使用3.1.x或更低版本。

composer require genkgo/[email protected]

入门指南

<?php
use Genkgo\ArchiveStream\Archive;
use Genkgo\ArchiveStream\CallbackContents;
use Genkgo\ArchiveStream\CallbackStringContent;
use Genkgo\ArchiveStream\EmptyDirectory;
use Genkgo\ArchiveStream\FileContent;
use Genkgo\ArchiveStream\Psr7Stream;
use Genkgo\ArchiveStream\StringContent;
use Genkgo\ArchiveStream\TarGzReader;
use Genkgo\ArchiveStream\TarReader;
use Genkgo\ArchiveStream\ZipReader;

$archive = (new Archive())
    ->withContent(new CallbackStringContent('callback.txt', function () {
        return 'data';
    }))
    ->withContent(new StringContent('string.txt', 'data'))
    ->withContent(new FileContent('file.txt', 'local/file/name.txt'))
    ->withContent(new EmptyDirectory('directory'))
    ->withContents([new StringContent('string2.txt', 'data')])
    ->withContents(new CallbackContents(fn () => yield new StringContent('string3.txt', 'data')));

$response = $response->withBody(
    new Psr7Stream(new ZipReader($archive))
);

// or for tar files

$response = $response->withBody(
    new Psr7Stream(new TarReader($archive))
);

// or for tar.gz files

$response = $response->withBody(
    new Psr7Stream(new TarGzReader(new TarReader($archive)))
);

在Symfony HttpFoundation(Symfony和Laravel)中的使用

use Symfony\Component\HttpFoundation\StreamedResponse;

$stream = new Psr7Stream(new ZipReader($archive));

$response = new StreamedResponse(function () use ($stream) {
    while ($stream->eof() === false) {
        echo $stream->read($blockSize = 1048576);
    }
}, 200, [
    'Content-type' => 'application/zip',
    'Content-Disposition' => 'attachment; filename="file.zip"',
    'Content-Transfer-Encoding' => 'binary',
]);

要求

  • 接收安全更新的PHP版本
  • gmp扩展
  • psr/http-message

限制

  • 仅支持Zip64(ZIP规范的第4.5版)格式。
  • 如果下载在完成前失败,则无法继续文件。

贡献者

  • Paul Duncan - 原始作者
  • Daniel Bergey
  • Andy Blyler
  • Tony Blyler
  • Andrew Borek
  • Rafael Corral
  • John Maguire
  • Frederik Bosch

许可

原始作品版权所有 2007-2009 Paul Duncan [email protected] 修改作品版权所有 2013-2015 Barracuda Networks, Inc. 修改作品版权所有 2016 Genkgo BV。

许可协议为MIT协议