За последние 24 часа нас посетили 20394 программиста и 1587 роботов. Сейчас ищут 2149 программистов ...

Торрент трекер

Тема в разделе "PHP для новичков", создана пользователем solistcomru, 25 ноя 2010.

  1. solistcomru

    solistcomru Активный пользователь

    С нами с:
    14 июн 2010
    Сообщения:
    15
    Симпатии:
    0
    Вопрос такой. Хочу сделать что-то вроде музыкального торрент трекера. Скажите, посоветуйте - если есть какие нибудь библиотеки, классы для работы с торент файлами. В общих чертах, я хочу вытащить из торрента количество сидеров, личеров, размер файлов и т.п.

    Если есть - подскажите пожалуйста и заодно просветите как ей (библиотекой, классом) пользоваться. Спс :roll:
     
  2. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    а поискать?
    PHP:
    1. <?php
    2. class TorrentFile {
    3.     var $index;
    4.     var $source;
    5.     var $final_array;
    6.  
    7.  
    8.     function handler() {
    9.         $char = $this->source[$this->index];
    10.  
    11.         if (is_numeric($char)) return $this->handler_string();
    12.         if ($char == 'i') {
    13.             ++$this->index;
    14.             return $this->handler_int();
    15.         }
    16.         if ($char=='l') {
    17.             ++$this->index;
    18.             return $this->handler_list();
    19.         }
    20.         if ($char=='d') {
    21.             ++$this->index;
    22.             return $this->handler_dictonary();
    23.         }
    24.  
    25.         die("MAIN HANDLER: UNEXPECTED CHAR (position: $this->index): ".$char);
    26.     }
    27.  
    28.  
    29.     function handler_int() {
    30.         $current_char='';
    31.         $number = "";
    32.  
    33.         while (($current_char = $this->source[$this->index]) != 'e') {
    34.             ++$this->index;
    35.             $number .= $current_char;
    36.         }
    37.  
    38.         ++$this->index;
    39.  
    40.         return (int) $number;
    41.     }
    42.  
    43.  
    44.  
    45.     function handler_string(){
    46.         $size ="";
    47.         while($this->source[$this->index] != ':') {
    48.             $size .= $this->source[$this->index];
    49.             ++$this->index;
    50.         }
    51.  
    52.         $i = ++$this->index;
    53.         $this->index += $size;
    54.  
    55.         $x= substr($this->source, $i, $size);
    56.  
    57.         return $x;
    58.     }
    59.  
    60.     function handler_list() {
    61.         $return_list = array();
    62.  
    63.         while ($this->source[$this->index] != 'e') {
    64.             $this->index1 = $this->index;
    65.             $return_list[] = $this->handler();
    66.             if ($this->index1 == $this->index) die("INFINITE LOOP IN THE LIST");
    67.         }
    68.         ++$this->index;
    69.  
    70.         return $return_list;
    71.     }
    72.  
    73.     function handler_dictonary() {
    74.         $return_dict = array();
    75.  
    76.         while ($this->source[$this->index] != 'e') {
    77.             $this->index1 = $this->index;
    78.             $return_dict[$this->handler_string()] = $this->handler();
    79.             if ($this->index1 == $this->index) die("INFINITE LOOP IN THE DICTONARY");
    80.         }
    81.         ++$this->index;
    82.  
    83.         return $return_dict;
    84.     }
    85.  
    86.  
    87.     function parse_file($filename) {
    88.         $this->source = file_get_contents($filename);
    89.  
    90.         $this->index = 0;
    91.         $filesize = strlen($this->source);
    92.  
    93.         $this->final_array=array();
    94.  
    95.         while($this->index<$filesize) {
    96.             $this->index1 = $this->index;
    97.             $this->final_array[] =$this->handler();
    98.             if ($this->index1 == $this->index) die("INFINITE LOOP IN THE ROOT LIST");
    99.         }
    100.  
    101.         $this->source = '';
    102.         return $this->final_array;
    103.     }
    104. }
    105. header("Content-type: text/plain; charset=UTF-8");
    106. $x = new TorrentFile();
    107. print_r($x->parse_file("EpicFail.torrent"));
     
  3. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Подобные библиотеки имеют чаще всего проблемы с файлами выше 2 гигов...
     
  4. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    Vladson
    вот числа для файла 16гб
    PHP:
    1. echo (int)$number."\n";
    даже если превысит лимит int он просто превратится во float и будет дальше работать, нет разве?
     
  5. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Padaboo
    Дело в том что в торрент-файле мног чисел, в том числе и размер в байтах.
     
  6. solistcomru

    solistcomru Активный пользователь

    С нами с:
    14 июн 2010
    Сообщения:
    15
    Симпатии:
    0
    Оо круто - спасибо. Но чтот я не нашел какой элемент массива вытаскивает количество сидеров и личеров. Подскажите пожалуйста.
     
  7. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    solistcomru
    Этого момента тут и быть не может. Прежде чем делать трекер лучше побольше узнайте о том как он работает...
     
  8. solistcomru

    solistcomru Активный пользователь

    С нами с:
    14 июн 2010
    Сообщения:
    15
    Симпатии:
    0
    А где это можно почитать? Документация в основном на английском, а я не шарю на английском)
     
  9. WildZero

    WildZero Активный пользователь

    С нами с:
    24 фев 2010
    Сообщения:
    242
    Симпатии:
    0
    Адрес:
    Пермь
    Бери исходники какого нибудь трекера и ковыряйся в них.
     
  10. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn