petrknap / binary
Library for work with binary data and objects
Fund package maintenance!
Other
Installs: 269
Dependents: 2
Suggesters: 0
Security: 0
Stars: 1
Watchers: 1
Forks: 0
Open Issues: 1
pkg:composer/petrknap/binary
Requires
- php: >=8.1
- petrknap/optional: ^3.1
- petrknap/shorts: ^3.0
Requires (Dev)
- ext-igbinary: *
- ext-mbstring: *
- ext-zlib: *
- nunomaduro/phpinsights: ^2.11
- petrknap/xz-utils: *
- phpstan/phpstan: ^1.12
- phpunit/phpunit: ^10.5
- squizlabs/php_codesniffer: ^3.7
Suggests
- ext-igbinary: Required to serialize data via igbinary
- ext-mbstring: Required to bite bytes
- ext-zlib: Required to compress data
- petrknap/xz-utils: Required to compress data
Conflicts
- petrknap/xz-utils: <1|>=2
README
Simple library for work with binary data and objects in PHP.
See the examples below for more information, or check out Encoder, Decoder, Serializer, Byter and Ascii.
Coder
namespace PetrKnap\Binary; $data = base64_decode('hmlpFnFwbchsoQARSibVpfbWVfuwAHLbGxjFl9eC8fiGaWkWcXBtyGyhABFKJtWl9tZV+7AActsbGMWX14Lx+A=='); $encoded = Binary::encode($data)->checksum()->zlib()->base64(urlSafe: true)->data; $decoded = Binary::decode($encoded)->base64()->zlib()->checksum()->data; printf('Data was coded into `%s` %s.', $encoded, $decoded === $data ? 'successfully' : 'unsuccessfully');
Serializer
namespace PetrKnap\Binary; $data = [ 'type' => 'image/png', 'data' => base64_decode('iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAA1JREFUGFdj+L+U4T8ABu8CpCYJ1DQAAAAASUVORK5CYII='), ]; $serialized = Binary::serialize($data); $unserialized = Binary::unserialize($serialized); printf('Data was serialized into `%s` %s.', base64_encode($serialized), $unserialized === $data ? 'successfully' : 'unsuccessfully');
Self-serializer
namespace PetrKnap\Binary; class DataObject implements Serializer\SelfSerializerInterface { use Serializer\SelfSerializerTrait; public function __construct( public string $data, ) { $this->referencesToConstructorArgs = [ &$this->data, ]; } } $instance = new DataObject('Lorem ipsum dolor sit amet, consectetur adipiscing elit.'); $instance->data .= ' Duis venenatis ultricies elementum.'; $binary = $instance->toBinary(); $binaryFromHelper = Binary::asBinary($instance); printf( 'Data object was serialized into `%s` %s.', base64_encode($binary), $binary === $binaryFromHelper && $instance == DataObject::fromBinary($binary) ? 'successfully' : 'unsuccessfully', );
Byter
namespace PetrKnap\Binary; $data = base64_decode('hmlpFnFwbchsoQARSibVpfbWVfuwAHLbGxjFl9eC8fiGaWkWcXBtyGyhABFKJtWl9tZV+7AActsbGMWX14Lx+A=='); $sha1 = sha1($data, binary: true); $md5 = md5($data, binary: true); $unbitten = Binary::unbite($sha1, $md5, $data); [$sha1Bite, $md5Bite, $dataBite] = Binary::bite($unbitten, 20, 16); printf( 'Hashes and data was unbitten into `%s` %s.', base64_encode($unbitten), $sha1Bite === $sha1 && $md5Bite === $md5 && $dataBite === $data ? 'successfully' : 'unsuccessfully', );
ASCII
namespace PetrKnap\Binary; printf(Ascii::RecordSeparator->join( Ascii::UnitSeparator->join('200', 'EUR', 'Maya Wilson'), Ascii::UnitSeparator->join('1600', 'USD', 'Quinton Rice'), ));
Run composer require petrknap/binary to install it.
You can support this project via donation.
The project is licensed under the terms of the LGPL-3.0-or-later.