<? php /* 功能描述:Torrent文件解码器,使用数组表示文件结构修改时间:2006-10-21 01:39修改者:fishtrees版本: v0.2备注:与v0.1相比使用了更简单的数据结构 */ // if (eregi("bdecoder.php",$_SERVER['PHP_SELF'])) die("You can't access this file directly"); include_once ( " debug.fun.php " ); class Bdecoder{ // 定义类型常量 public static $STR = " s " ; public static $INT = " i " ; public static $LIST = " l " ; public static $DIC = " d " ; // 控制模块 //<String> $str torrent文件原始串 public function BDecode( $str ) { $root = $this -> BDec( $str ); // 开始解码 if ( $root !== false && $root !== null ){ return $root ; } else { return false ; } } // 解码器 //<String> &$str torrent文件原始串 private function BDec( & $str ) { // 解码类型选择 if ( preg_match ( ' /^(d+):/ ' , $str )) // 字符串类型 return $this -> BDec_string( $str ); elseif ( preg_match ( ' /^i(d+)e/ ' , $str )) // 整数类型 return $this -> BDec_integer( $str ); elseif ( $str [ 0 ] == " l " ) // 表类型 return $this -> BDec_list( $str ); elseif ( $str [ 0 ] == " d " ) // 字典类型 return $this -> BDec_dictionary( $str ); else trigger_error ( " Error: " . htmlspecialchars ( substr ( $str , 0 , 50 )) , E_USER_WARNING ); // 出错 return null ; } // 解码字符串类型 //<String> $str torrent文件原始串 private function BDec_string( & $str ) { if ( ! preg_match ( ' /^(d+):/ ' , $str , $m )){ // 判断原始串第一个编码模式是否是字符串类型编码模式后截取该模式 //该类型编码模式=N:长度为N的字符串 return false ;