首页 > 编程 > PHP > 正文

php读取torrent种子文件内容的方法(测试可用)

2020-03-22 19:25:10
字体:
来源:转载
供稿:网友
本文实例讲述了php读取torrent种子文件内容的方法。分享给大家供大家参考,具体如下: * Class xBEncoder * Author: Angus.Fenying * Version: 0.1 * Date: 2014-06-03 * This html' target='_blank'>class helps stringify or parse BENC * codes. * All Copyrights 2007 - 2014 Fenying Studio Reserved.class xBEncoder const READY = 0; const READ_STR = 1; const READ_DICT = 2; const READ_LIST = 3; const READ_INT = 4; const READ_KEY = 5; public $y; protected $z, $m, $n; protected $stat; protected $stack; * This method saves the status of current * encode/decode work. protected function push($newY, $newStat) array_push($this- stack, array($this- y, $this- z, $this- m, $this- n, $this- stat)); list($this- y, $this- z, $this- m, $this- n, $this- stat) = array($newY, 0, 0, 0, $newStat); * This method restore the saved status of current * encode/decode work. protected function pop() $t = array_pop($this- stack); if ($t) { if ($t[4] == self::READ_DICT) { $t[0]- {$t[1]} = $this- $t[1] = 0; } elseif ($t[4] == self::READ_LIST) $t[0][] = $this- list($this- y, $this- z, $this- m, $this- n, $this- stat) = $t; * This method initializes the status of work. * YOU SHOULD CALL THIS METHOD BEFORE EVERYTHING. public function init() $this- stat = self::READY; $this- stack = array(); $this- z = $this- m = $this- n = 0; * This method decode $s($l as length). * You can get $obj- y as the result. public function decode($s, $l) $this- y = 0; for ($i = 0; $i ++$i) { switch ($this- stat) { case self::READY: if ($s[$i] == 'd') { $this- y = new xBDict(); $this- stat = self::READ_DICT; } elseif ($s[$i] == 'l') { $this- y = array(); $this- stat = self::READ_LIST; break; case self::READ_INT: if ($s[$i] == 'e') { $this- y- val = substr($s, $this- m, $i - $this- $this- pop(); break; case self::READ_STR: if (xBInt::isNum($s[$i])) continue; if ($s[$i] = ':') { $this- z = substr($s, $this- m, $i - $this- $this- y = substr($s, $i + 1, $this- z + 0); $i += $this- $this- pop(); break; case self::READ_KEY: if (xBInt::isNum($s[$i])) continue; if ($s[$i] = ':') { $this- n = substr($s, $this- m, $i - $this- $this- z = substr($s, $i + 1, $this- n + 0); $i += $this- $this- stat = self::READ_DICT; break; case self::READ_DICT: if ($s[$i] == 'e') { $this- pop(); break; } elseif (!$this- z) { $this- m = $i; $this- stat = self::READ_KEY; break; case self::READ_LIST: switch ($s[$i]) { case 'e': $this- pop(); break; case 'd': $this- push(new xBDict(), self::READ_DICT); break; case 'i': $this- push(new xBInt(), self::READ_INT); $this- m = $i + 1; break; case 'l': $this- push(array(), self::READ_LIST); break; default: if (xBInt::isNum($s[$i])) { $this- push('', self::READ_STR); $this- m = $i; break; $rtn = empty($this- stack); $this- init(); return $rtn; * This method encode $obj- y into BEncode. public function encode() return $this- _encDo($this- protected function _encStr($str) return strlen($str) . ':' . $str; protected function _encDo($o) if (is_string($o)) return $this- _encStr($o); if ($o instanceof xBInt) return 'i' . $o- val . 'e'; if ($o instanceof xBDict) { $r = 'd'; foreach ($o as $k = $c) $r .= $this- _encStr($k) . $this- _encDo($c); return $r . 'e'; if (is_array($o)) { $r = 'l'; foreach ($o as $c) $r .= $this- _encDo($c); return $r . 'e';class xBDictclass xBInt public $val; public function __construct($val = 0) $this- val = $val; public static function isNum($chr) $chr = ord($chr); if ($chr = 57 && $chr = 48) return true; return false;//使用实例$s = file_get_contents("test.torrent");$bc = new xBEncoder();$bc- init();$bc- decode($s, strlen($s));var_dump($bc- 更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP数组(Array)操作技巧大全》、《PHP数学运算技巧总结》、《PHP图形与图片操作技巧汇总》、《php操作office文档技巧总结(包括word,excel,access,ppt)》、《php日期与时间用法总结》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》希望本文所述对大家PHP程序设计有所帮助。PHP教程

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表