栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > PHP

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

PHP 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

本文实例讲述了php读取torrent种子文件内容的方法。分享给大家供大家参考,具体如下:

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);
  }
  
  protected function pop()
  {
    $t = array_pop($this->stack);
    if ($t) {
      if ($t[4] == self::READ_DICT) {
 $t[0]->{$t[1]} = $this->y;
 $t[1] = 0;
      } elseif ($t[4] == self::READ_LIST)
 $t[0][] = $this->y;
      list($this->y, $this->z, $this->m, $this->n, $this->stat) = $t;
    }
  }
  
  public function init()
  {
    $this->stat = self::READY;
    $this->stack = array();
    $this->z = $this->m = $this->n = 0;
  }
  
  public function decode($s, $l)
  {
    $this->y = 0;
    for ($i = 0; $i < $l; ++$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->m);
     $this->pop();
   }
   break;
 case self::READ_STR:
   if (xBInt::isNum($s[$i]))
     continue;
   if ($s[$i] = ':') {
     $this->z = substr($s, $this->m, $i - $this->m);
     $this->y = substr($s, $i + 1, $this->z + 0);
     $i += $this->z;
     $this->pop();
   }
   break;
 case self::READ_KEY:
   if (xBInt::isNum($s[$i]))
     continue;
   if ($s[$i] = ':') {
     $this->n = substr($s, $this->m, $i - $this->m);
     $this->z = substr($s, $i + 1, $this->n + 0);
     $i += $this->n;
     $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;
  }
  
  public function encode()
  {
    return $this->_encDo($this->y);
  }
  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 xBDict
{
}
class 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->y);

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP数组(Array)操作技巧大全》、《PHP数学运算技巧总结》、《PHP图形与图片操作技巧汇总》、《php操作office文档技巧总结(包括word,excel,access,ppt)》、《php日期与时间用法总结》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/43459.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号