apollorip / bencode-torrent
v1.2.0
2021-08-22 14:43 UTC
Requires
- php: >=7.2
Requires (Dev)
- phpstan/phpstan: ^0.12.48
- phpunit/phpunit: ^8
- squizlabs/php_codesniffer: 3.*
README
PHP库,用于编码和解码BitTorrent BEncode数据,主要关注在Gazelle中的使用。
使用方法
composer require orpheusnet/bencode-torrent
use OrpheusNET\BencodeTorrent; $bencode = new Bencode(); $bencode->decodeFile('path/to/file.torrent');
描述
BEncode是BitTorrent用来存储和传输非结构化数据的编码方式。它支持
- 字节字符串
- 整数
- 列表
- 字典(关联数组,键按字母顺序排序)
有关这些类型支持的更多信息,请参阅BitTorrentSpecification#Bencoding。
除此之外,预期种子文件是包含最小键 announce(字节字符串)和 info(字典)的BEncode字典。在 info 字典中,我们预期有 piece length(整数)和 pieces(字节字符串)。如果种子只有一个文件,我们预期有 name(字节字符串)和 length(整数),而对于多文件种子,我们将有 name(字节字符串)和 files(列表),其中每个元素都是一个字典,包含键 length(整数)和 path(字符串列表)。
因此,此库在加载数据时会进行一些检查,以确保存在这些必需的字段,否则会抛出异常。有关这些字段的更多信息,请参阅BitTorrentSpecification#Metainfo_File_Structure。
最后,此库主要用于在Gazelle中使用,因此库中包含一些实用函数,用于完成以下操作
- 确保种子文件标记为'私有'
- 在种子上设置'来源'(以确保唯一的info散列)
- 清除不必要的字段,这些字段也揭示了关于用户的信息(如公告列表和创建者)
- 生成Gazelle期望的字符串文件列表以进行显示
此代码基于WCD的Gazelle中两个分开的BEncode库的代码(bencodetorrent.class.php和torrent.class.php),但去除了现在不再必要的32位模拟器,并将其作为一个统一的库,用于上传和下载种子文件。