dsmithhayes / bencode
A simple bencoding library for PHP.
Installs: 49
Dependents: 0
Suggesters: 0
Security: 0
Stars: 3
Watchers: 1
Forks: 0
Open Issues: 0
pkg:composer/dsmithhayes/bencode
Requires (Dev)
- phpunit/phpunit: ^4.7
This package is not auto-updated.
Last update: 2025-10-15 15:34:03 UTC
README
This is a library used for encoding and decoding bencoded streams. Bencoding
is primarily found in the makeup of .torrent files.
Bencoding Basics
Pronounced bee-encoding, this encoding focuses on binary encoding with four basic element data structures.
IntegerByteListDictionary
The last two elements (List, Dictionary) are just collections of the
first two elements.
Integer
The Integer element is a positive or negative integer that is always
prefixed with an i, and suffixed with an e.
i45e
i-1e
Usage
<?php
use Bencode\Integer;
$int = new Integer(45);
echo $int->encode(); // i45e
$int->decode(i-445e);
echo $int->write(); // -445
Byte
Bytes are encoded with their size (in bytes), a : and then the sequence
of bytes.
5:hello
6:123456
Note that the second example will encode the character codes and not the binary value of the integers.
Usage
<?php
use Bencode\Byte;
$byte = new Byte('hello');
echo $byte->encode(); // 5:hello
$byte->decode('5:world');
echo $byte->write(); // world
List
A List is just that, a list of Byte and Integer elements. It has a siilar
encoding as the Integer. The List is prefixed with l and suffixed with
e. Within are encoded Bytes and integers.
li45e5:hello5:worldi-45e
Usage
The class is named BList because List is a reserved keyword in PHP.
<?php
use Bencode\Collection\BList
$list = new BList([45, 'hello', 'world', -45]);
echo $list->encode(); // li45e5:hello5:worldi-45e
$list->decode('li34e4:davee');
print_r($list->write()); // [34, 'dave']
Dictionary
Dictionaries are key-value lists. The first element in the list is the key, and
the second is the value. The Dictionary is prefixed with a d and suffixed with
an e.
d3:key5:valuee
You can also use elements as values in the list.
d3:keyli3ei5eee
d3:keyd3:key5:valueee
Usage
<?php
use Bencode\Collection\Dictionary;
$dictionary = new Dictionary(['key' => 'value']);
echo $dictionary->encode(); // d3:key5:valuee
$dictionary->decode('d3:new6:valuese');
print_r($dictionary->write()); // ['new' => 'values']
Dictionaries are what your .torrent files are encoded with. You can easily
build objects to manipulate data of a torrent file.
<?php
use Bencode\Collection\Dictionary;
$dictionary = new Dictionary();
$torrent = file_get_contents('example.torrent');
$ditionary->decode($torrent);
$buffer = $dictionary->write();
echo $buffer['comment'];