种子转磁力链接php,Bt种子转磁力链

test.php

include 'BEncode.php';

include 'BDecode.php';

$torrent_content = file_get_contents('filename.torrent');

$desc = BDecode($torrent_content);

$info = $desc['info'];

$hash = strtoupper(sha1( BEncode($info) ));

sprintf('magnet:?xt=urn:btih:%s&dn=%s', $hash, $info['name']);

BEncode.php

class BEncode {

function makeSorted($array) {

// Shouldn't happen!

if (empty($array))

return $array;

$i = 0;

foreach($array as $key => $dummy)

$keys[$i++] = stripslashes($key);

sort($keys);

for ($i=0; isset($keys[$i]); $i++)

$return[addslashes($keys[$i])] = $array[addslashes($keys[$i])];

return $return;

}

// Encodes strings, integers and empty dictionaries.

// $unstrip is set to true when decoding dictionary keys

function encodeEntry($entry, &$fd, $unstrip = false) {

if (is_bool($entry)) {

$fd .= 'de';

return;

}

if (is_int($entry) || is_float($entry)) {

$fd .= 'i'.$entry.'e';

return;

}

if ($unstrip)

$myentry = stripslashes($entry);

else

$myentry = $entry;

$length = strlen($myentry);

$fd .= $length.':'.$myentry;

}

// Encodes lists

function encodeList($array, &$fd) {

$fd .= 'l';

// The empty list is defined as array();

if (empty($array)) {

$fd .= 'e';

return;

}

for ($i = 0; isset($array[$i]); $i++)

$this->decideEncode($array[$i], $fd);

$fd .= 'e';

}

// Passes lists and dictionaries accordingly, and has encodeEntry handle

// the strings and integers.

function decideEncode($unknown, &$fd) {

if (is_array($unknown)) {

if (isset($unknown[0]) || empty($unknown))

return $this->encodeList($unknown, $fd);

else

return $this->encodeDict($unknown, $fd);

}

$this->encodeEntry($unknown, $fd);

}

// Encodes dictionaries

function encodeDict($array, &$fd) {

$fd .= 'd';

if (is_bool($array)) {

$fd .= 'e';

return;

}

// NEED TO SORT!

$newarray = $this->makeSorted($array);

foreach($newarray as $left => $right) {

$this->encodeEntry($left, $fd, true);

$this->decideEncode($right, $fd);

}

$fd .= 'e';

}

}

function BEncode($array) {

$string = '';

$encoder = new BEncode;

$encoder->decideEncode($array, $string);

return $string;

}

BDecode.php

class BDecode {

function numberdecode($wholefile, $offset) {

// Funky handling of negative numbers and zero

$negative = false;

if ($wholefile[$offset] == '-') {

$negative = true;

$offset++;

}

if ($wholefile[$offset] == '0') {

$offset++;

if ($negative)

return array(false);

if ($wholefile[$offset] == ':' || $wholefile[$offset] == 'e')

return array(0, ++$offset);

return array(false);

}

$ret[0] = 0;

for(;;) {

if ($wholefile[$offset] >= '0' && $wholefile[$offset] <= '9') {

$ret[0] *= 10;

//Added 2005.02.21 - VisiGod

//Changing the type of variable from integer to double to prevent a numeric overflow

settype($ret[0],'double');

//Added 2005.02.21 - VisiGod

$ret[0] += ord($wholefile[$offset]) - ord('0');

$offset++;

}       else if ($wholefile[$offset] == 'e' || $wholefile[$offset] == ':') {

// Tolerate : or e because this is a multiuse function

$ret[1] = $offset+1;

if ($negative) {

if ($ret[0] == 0)

return array(false);

$ret[0] = - $ret[0];

}

return $ret;

} else return array(false);

}

}

function decodeEntry($wholefile, $offset=0) {

if ($wholefile[$offset] == 'd')

return $this->decodeDict($wholefile, $offset);

if ($wholefile[$offset] == 'l')

return $this->decodelist($wholefile, $offset);

if ($wholefile[$offset] == 'i')

return $this->numberdecode($wholefile, ++$offset);

// String value: decode number, then grab substring

$info = $this->numberdecode($wholefile, $offset);

if ($info[0] === false)

return array(false);

$ret[0] = substr($wholefile, $info[1], $info[0]);

$ret[1] = $info[1]+strlen($ret[0]);

return $ret;

}

function decodeList($wholefile, $offset) {

if ($wholefile[$offset] != 'l')

return array(false);

$offset++;

$ret = array();

for ($i=0;;$i++) {

if ($wholefile[$offset] == 'e')

break;

$value = $this->decodeEntry($wholefile, $offset);

if ($value[0] === false)

return array(false);

$ret[$i] = $value[0];

$offset = $value[1];

}

// The empty list is an empty array. Seems fine.

return array(0=>$ret, 1=>++$offset);

}

// Tries to construct an array

function decodeDict($wholefile, $offset=0) {

if ($wholefile[$offset] == 'l')

return $this->decodeList($wholefile, $offset);

if ($wholefile[$offset] != 'd')

return false;

$ret=array();

$offset++;

for (;;) {

if ($wholefile[$offset] == 'e')       {

$offset++;

break;

}

$left = $this->decodeEntry($wholefile, $offset);

if (!$left[0])

return false;

$offset = $left[1];

if ($wholefile[$offset] == 'd') {

// Recurse

$value = $this->decodedict($wholefile, $offset);

if (!$value[0])

return false;

$ret[addslashes($left[0])] = $value[0];

$offset= $value[1];

continue;

}

if ($wholefile[$offset] == 'l') {

$value = $this->decodeList($wholefile, $offset);

if (!$value[0] && is_bool($value[0]))

return false;

$ret[addslashes($left[0])] = $value[0];

$offset = $value[1];

continue;

}

$value = $this->decodeEntry($wholefile, $offset);

if ($value[0] === false)

return false;

$ret[addslashes($left[0])] = $value[0];

$offset = $value[1];

}

return array(0=>(empty($ret)?true:$ret), 1=>$offset);

}

}

function BDecode($wholefile) {

$decoder = new BDecode;

$return = $decoder->decodeEntry($wholefile);

return $return[0];

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
张恩民 老师 的PHP视频教程【www.php100.com】 绝对是PHP教程中的经典。 PHP100视频教程目录(共112集) PHP100视频教程1:环境配置与代码调试 PHP100视频教程2:PHP的数据类型与源码调试 PHP100视频教程3:常用PHP运算类型介绍与应用 PHP100视频教程4: PHP条件语句介绍与应用 PHP100视频教程5:PHP循环语句的介绍与应用 PHP100视频教程6:PHP数组的创建修改应用 PHP100视频教程7:PHP函数和自定义函数 PHP100视频教程8:Mysql 简介和创建新的数据库 PHP100视频教程9:数据库中的常用SQL语句 PHP100视频教程10:MYSQL在PHP5中的应用 PHP100视频教程11:学习制作PHP+MYSQL留言板(上) PHP100视频教程12:学习制作PHP+MYSQL留言板(下) PHP100视频教程13:PHP+MYSQL分页原理 PHP100视频教程14:PHP上传原理及应用 PHP100视频教程15:PHP生成HTML文件原理 PHP100视频教程16:PHP小偷程序原理和实例 PHP100视频教程17:PHP面向对象开发的学习(一) PHP100视频教程18:PHP面向对象开发的学习(二) PHP100视频教程19:PHP面向对象开发的学习(三) PHP100视频教程20:PHP面向对象开发的学习(四) PHP100视频教程21:PHP面向对象开发的学习(五) PHP100视频教程22:PHP面向对象开发的学习(六) PHP100视频教程23:PHP面向对象开发的学习(七) PHP100视频教程24:PHP面向对象开发的学习(八) PHP100视频教程25:PHP面向对象开发的学习(九) PHP100视频教程26:制作自己的PHP+MYSQL的类 PHP100视频教程27:PHP模板引擎Smarty入门使用 PHP100视频教程28:PHP模板引擎Smarty的变量操作符 PHP100视频教程29:PHP模板引擎Smarty内置函数 PHP100视频教程30:PHP模板引擎Smarty缓存应用 PHP100视频教程31:PHP在线编辑器fckeditor应用 PHP100视频教程32:PHP5中Cookie与 Session详解 PHP100视频教程33:PHP5中图片验证码的制作(上) PHP100视频教程34:PHP5中图片中文验证码(下) PHP100视频教程35:PHP5文字图片混合水印与缩略图 PHP100视频教程36:PHP中正则表达式学习及应用(一) PHP100视频教程37:PHP中正则表达式学习及应用(二) PHP100视频教程38:PHP中正则表达式学习及应用(三) PHP100视频教程39:PHP中正则表达式学习及应用(四) PHP100视频教程40:PHP中开发自己的-UBB代码 PHP100视频教程41:PHP站内搜索、多关键字、加亮显示 PHP100视频教程42:PHP通过mail()或Socket发邮件 PHP100视频教程43:PHP中MVC学习之ThinkPHP(上) PHP100视频教程44:PHP中MVC学习之ThinkPHP(下) PHP100视频教程45:如何用PHP开发一个完整的网站 PHP100视频教程46:PHPMyAdmin功能操作详解 PHP100视频教程47:PHP输出CSV和EXCEL两种简单的方法 PHP100视频教程48:Ajax+PHP快速上手及应用 PHP100视频教程49: Ajax+PHP打造等待进度条效果(二) PHP100视频教程50: Ajax+PHP检查用户名或邮件(三) PHP100视频教程51:PHP+MYSQL会员系统的开发(上) PHP100视频教程52:PHP+MYSQL会员系统的开发(下) PHP100视频教程53:PHP如何防止注入及开发安全 PHP100视频教程54:Apache Rewrite 拟静态配置 PHP100视频教程55:PHP5中使用PDO连数据库 PHP100视频教程56:制作PHP安装程序的原理和步骤 PHP100视频教程57:PHP备份数据库原理和方法 PHP100视频教程58:快速设计一个企业网站之BIWEB PHP100视频教程59:关于BIWEB常见问题和结构分析 PHP100视频教程60:PHP与数据库代码开发规范 PHP100视频教程61:PHP+Mysql新闻系统的开发一 PHP100视频教程62:PHP+Mysql新闻系统的开发二 PHP100视频教程63:PHP+Mysql新闻系统的开发三(上) PHP100视频教程64:PHP+Mysql新闻系统的开发四 PHP100视频教程65:PHP+Mysql新闻系统的开发五 PHP100视频教程66:PHP+Mysql新闻系统的开发六 PHP100视频教程67:PHP+Mysql新闻系统的开发七 PHP100视频教程68:PHP+Mysql新闻系统的开发八 PHP100视频教程69:PHP+Mysql新闻系统的开发九 PHP100视频教程70:PHP 5.3.1 + Apache + Mysql配置 PHP100视频教程71:PHP SQLite 的使用和配置 PHP100视频教程72:PHP+SQLite 常用函数及应用 PHP100视频教程73:PHP MemCached高级缓存配置 PHP100视频教程74:PHP MemCached 高级缓存应用 PHP100视频教程75:Zend framework 配置与调试 PHP100视频教程76:Zend framework 数据库操之读取与插入 PHP100视频教程77:Zend framework数据库操作之编辑和视图函数 PHP100视频教程78:PHP+Flash多文件异步上传 swfupload PHP100视频教程79:PHP上传RAR压缩包并解压目录 PHP100视频教程80:ADODB PHP 数据库万能引擎类(上) PHP100视频教程81:ADODB PHP 数据库万能引擎类(下) PHP100视频教程82: PHP开发通用采集入库程序 PHP100视频教程83: PHP开发通用采集入库程序二 PHP100视频教程84:PHP开发通用采集入库程序三 PHP100视频教程85:PHP 图表类 JPGraph 入门配置与应用 PHP100视频教程86:PHP JPGraph 中文字体和背景设置 PHP100视频教程87:PHP 之 CURL 传输与获取功能 PHP100视频教程88:PHP 之 CURL模拟登陆并获取数据 PHP100视频教程89:PHP XML 的 DOMDocument 读取功能 PHP100视频教程90:PHP DOM 创建生成多功能 XML文件 PHP100视频教程91:PHP修改和删除XML内容的原理和方法 PHP100视频教程92:在线支付口之PHP支付宝口开发 PHP100视频教程93:在线支付口之PHP云网口开发 PHP100视频教程94:SVN (Subversion) 配置与安装调试 PHP100视频教程95:SVN (Subversion) 应用与技巧 PHP100视频教程96:PHP程序员经典面试&笔试题目解析(上) PHP100视频教程97:PHP程序员经典面试&笔试题目解析(下) PHP100视频教程98:PHP会员权限交叉多类型的控制(上) PHP100视频教程99:PHP会员权限交叉多类型的控制(下) PHP100视频教程100:PHP程序员的学习之路和未来职业规划 PHP100视频教程101:PHP5.3 Xdebug 调试器配置与应用 PHP100视频教程102:PHP5.3 Xdebug 错误分析与性能调试 PHP100视频教程103:JQuery 之 Javascript 基础(一) PHP100视频教程104:JQuery 之 Javascript 基础(二) PHP100视频教程105:JQuery 之 Javascript 基础(三) PHP100视频教程106:JQuery 之语法模式与开发基础 PHP100视频教程107:JQuery 之选择器、事件器详解 PHP100视频教程108:JQuery之各类动画效果的实现 PHP100视频教程109:JQuery 之 Ajax 开发详解 PHP100视频教程110:Jquery案例 之 双下拉框内容移动 PHP100视频教程111:Jquery案例 之 复选框与隔行换色 PHP100视频教程112:Jquery案例 之 双击编辑异步更新

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值