Поиграть


Фотографии знаменитостей, Герои нашего времени

Bittorrent парсер (Bittorrent parser)

Code (php)
  1.  
  2. <?php
  3.  
  4. // bit torrent parser function by techtonik // php.net
  5.  
  6.  
  7. if ($argc != 2) exit("usage: ".$argv[0]." <torrent>");
  8. $input = $argv[1];
  9. if (!file_exists($input)) { exit("input file $input doesn’t exists"); }
  10.  
  11. $str = file_get_contents($input);
  12.  
  13. function parse_torrent($s) {
  14.     static $str;
  15.     $str = $s;
  16.  
  17. //    echo $str{0};
  18.  
  19.     if ($str{0} == ‘d’) {
  20.        $str = substr($str,1);
  21.        $ret = array();
  22.        while (strlen($str) && $str{0} != ‘e’) {
  23.           $key = parse_torrent($str);
  24.           if (strlen($str) == strlen($s)) break; // prevent endless cycle if no changes made
  25.           if (!strcmp($key, "info")) {
  26.               $save = $str;
  27.           }
  28. //          echo ".",$str{0};
  29.           $value = parse_torrent($str);
  30.           if (!strcmp($key, "info")) {
  31.               $tosha = substr($save, 0, strlen($save) - strlen($str));
  32.               $ret[‘info_hash’] = sha1($tosha);
  33.           }
  34.  
  35.           // process hashes - make this stuff an array by piece
  36.           if (!strcmp($key, "pieces")) {
  37.               $value = explode("====",
  38.                          substr(
  39.                            chunk_split( $value, 20, "===="),
  40.                            0, -4
  41.                          )
  42.                        );
  43.           };
  44.           $ret[$key] = $value;
  45.        }
  46.        $str = substr($str,1);
  47.        return $ret;
  48.     } else if ($str{0} == ‘i’) {
  49. //       echo "_";
  50.        $ret = substr($str, 1, strpos($str, "e")-1);
  51.        $str = substr($str, strpos($str, "e")+1);
  52.        return $ret;
  53.     } else if ($str{0} == ‘l’) {
  54. //       echo "#";
  55.        $ret = array();
  56.        $str = substr($str, 1);
  57.        while (strlen($str) && $str{0} != ‘e’) {
  58.           $value = parse_torrent($str);
  59.           if (strlen($str) == strlen($s)) break; // prevent endless cycle if no changes made
  60.           $ret[] = $value;
  61.        }
  62.        $str = substr($str,1);
  63.        return $ret;
  64.     } else if (is_numeric($str{0})) {
  65. //       echo "@";
  66.        $namelen = substr($str, 0, strpos($str, ":"));
  67.        $name = substr($str, strpos($str, ":")+1, $namelen);
  68.        $str = substr($str, strpos($str, ":")+1+$namelen);
  69.        return $name;
  70.     }                               
  71. }
  72.  
  73. $bencode = parse_torrent($str);
  74.  
  75. print_r( $bencode );
  76.  

+1+2+3+4+5 (1 голосов, в среднем: 5 из 5)
Загрузка... Загрузка...

Оставьте комментарий

Блог разработчика / подоконники Киев
Y818 universal - Детское кресло - avshop.ua
Most common techniques how to know if my husband is cheating.
бадминтон переделкино классно!