rendered paste body function decodeFile($file) { if(!file_exists($file)) return false; $data = file_get_contents($file); return $this->decode($data); } function decode($s) { static $str; $str = $s; $char = $str[0]; switch($char) { case 'd': $str = substr($str, 1); $ret = array(); while (strlen($str) && $str[0] != 'e') { $key = $this->decode($str); if (strlen($str) == strlen($s)) break; // prevent endless cycle if no changes made if (!strcmp($key, "info")) $save = $str; $value = $this->decode($str); if (!strcmp($key, "info")) { $tosha = substr($save, 0, strlen($save) - strlen($str)); $ret['info_hash'] = sha1($tosha); } // process hashes - make this stuff an array by piece if (!strcmp($key, "pieces")) { $value = explode("====", substr(chunk_split( $value, 20, "===="), 0, -4)); } $ret[$key] = $value; } $str = substr($str, 1); return $ret; break; case 'i': $ret = substr($str, 1, strpos($str, "e") - 1); $str = substr($str, strpos($str, "e") + 1); return $ret; break; case 'l': $ret = array(); $str = substr($str, 1); while (strlen($str) && $str[0] != 'e') { $value = $this->decode($str); if (strlen($str) == strlen($s)) break; // prevent endless cycle if no changes made $ret[] = $value; } $str = substr($str, 1); return $ret; break; default: if(is_numeric($char)) { $nameLen = substr($str, 0, strpos($str, ":")); $name = substr($str, strpos($str, ":") + 1, $nameLen); $str = substr($str, strpos($str, ":") + 1 + $nameLen); return $name; } break; } }