jakubboucek / tar-stream-reader
Reader for TAR and TAR+GZip Archives, optimized for read huge size archives, effective memory usage.
Requires
- php: ~8.0
- psr/http-message: ~1.0 || ~2.0
Requires (Dev)
- phpstan/phpstan: 1.12.6
- phpunit/phpunit: ^9.0 || ^10.0
Suggests
- ext-bz2: Needed to support BZ2 compressed archive format
- ext-zlib: Needed to support GZipped archive format
README
Reader for TAR and TAR+GZip Archives, optimized for read huge size archives, effective memory usage.
Features
- Read TAR archives from disk
- Support GZipped and BZipped archives
- Iterate over Archive content
- Get name, size and type of each file
- Recognize Directory files type
- Recognize Regular files type
- Get content of files
- Allows to export content to files
- Optimized for performance and low-memory
- Use stream-first access - file content not stored to memory
Install
composer require jakubboucek/tar-stream-reader
Usage
Read files from an archive:
use JakubBoucek\Tar; foreach (new Tar\FileReader('example.tar') as $file) { echo "File {$file->getName()} is {$file->getSize()} bytes size, content of file:\n"; echo $fileInfo->getContent() . "\n"; }
Package recognizes few types of Archive when using classic filename extension (e.g.: .tar
, .tgz
, .tar.bz2
), but
You can explicitly define archive type thought second parameter:
use JakubBoucek\Tar; foreach (new Tar\FileReader('example.tar+gzip', new Tar\Filehandler\Gzip()) as $file) { echo "File {$file->getName()} is {$file->getSize()} bytes size.\n"; }
Package allows to process any type of stream, use StreamReader
instead of FileReader
:
use JakubBoucek\Tar; $stream = someBeatifulFuntionToGetStream(); foreach (new Tar\StreamReader($stream) as $file) { echo "File {$file->getName()} is {$file->getSize()} bytes size.\n"; }
FAQ
Can I use Package for ZIP, RAR, … archives?
No, Package recognize only TAR Archive format, additionaly recognize GZipped or BZipped Archive.
Can I use Package to create/modify Archive?
No, Package provide only read possibility.
Can I search file in Archive?
No, TAR Archive is stream-based format, it does not support search, you must always iterate over whole Archive.
How big file I can proceed?
Here are two scopes of this question: Archive size or Size of files in Archive
- Archive size is teoretically unlimited, beacuse package is using stream very effective.
- Size of files in Archive is teoretically unlimited when use steam-based method to extraxt content
(
toFile()
ortoStream()
), otherwise is size limited with available memory, because is content filled into variable.
Contributing
Please don't hesitate send Issue or Pull Request.
Security
If you discover any security related issues, please email pan@jakubboucek.cz instead of using the issue tracker.
License
The MIT License (MIT). Please see License File for more information.