syntaxx / lz4
A pure PHP implementation of LZ4 compression and decompression
v0.1.0
2025-05-17 14:28 UTC
Requires
- php: >=8.1
Requires (Dev)
- phpunit/phpunit: ^10.0
- slevomat/coding-standard: ^8.0
- squizlabs/php_codesniffer: ^3.7
README
A quick and dirty AI port of MiniLZ4 to PHP. MiniLZ4 is a minimal implementation of LZ4 block encoding and decoding, originally based on node-lz4.
Overview
This library provides a pure PHP implementation of the LZ4 compression algorithm, specifically ported from the JavaScript MiniLZ4 implementation. It maintains compatibility with the original implementation while providing a PHP-native interface.
Features
- Pure PHP implementation
- A quick and dirty AI port of MiniLZ4's
- Block compression and decompression
- Package compression with chunking support
- Verification capabilities
- No external dependencies
Installation
You can install the package via composer:
composer require syntaxx/lz4
Requirements
- PHP >= 8.1
Usage
Basic Compression/Decompression
use Syntaxx\LZ4\LZ4; // Create an instance $lz4 = new LZ4(); // Compress data $compressed = $lz4->compress($data); // Decompress data $decompressed = $lz4->decompress($compressed, $originalSize);
Package Compression
use Syntaxx\LZ4\LZ4; // Create an instance $lz4 = new LZ4(); // Compress data in chunks $result = $lz4->compressPackage($data, $verify = false); // Result structure [ 'data' => string, // Compressed data 'cachedOffset' => int, // Offset for cached chunks 'cachedIndexes' => array, // Cache indexes 'cachedChunks' => array, // Cached decompressed chunks 'offsets' => array, // Chunk offsets 'sizes' => array, // Chunk sizes 'successes' => array // Compression success flags (1 for success, 0 for failure) ]
Development
Running Tests
# Run tests composer test # Run tests with coverage composer test:coverage
Code Style
# Check code style composer cs # Fix code style issues composer cs:fix
License
This project is licensed under the MIT License, following the same license as the original MiniLZ4 implementation.
Credits
- Original MiniLZ4 implementation by the Emscripten team
- Based on node-lz4 by Pierre Curto
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.