genkgo / archive-stream
将ZIP文件作为PSR-7消息流式传输(内存高效)
3.4.0
2023-12-04 13:33 UTC
Requires
- php: ~8.1.0 || ~8.2.0 || ~8.3.0
- ext-gmp: *
- psr/http-message: ~1.0 || ~2.0
Requires (Dev)
- ext-zip: *
- ext-zlib: *
- friendsofphp/php-cs-fixer: ^3.0
- phpstan/phpstan: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- phpunit/phpunit: ^9.3.8
Suggests
- ext-zlib: Creater gzipped tar files (tar.gz)
Provides
README
将ZIP文件作为PSR-7消息流式传输(内存高效)。
安装
使用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协议