All pastes #561293 Raw Edit

Someone

public php v1 · immutable
·published 2007-06-12 12:16 UTC
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;	    }	}