[help] vbtt for php

Тема в разделе "vBulletin", создана пользователем Axom, 23 янв 2008.

Статус темы:
Закрыта.
  1. Axom

    Axom

    Регистр.:
    25 апр 2007
    Сообщения:
    320
    Симпатии:
    94
    Я знаю что таких опций нет, но мне утверждают обратное, хотя мало ли...

    1. Можно ли определённому пользователю дать прав просмотра удалённых сообщений (не путайте с уведомлением об удалении, а чтобы мог и читать удалённые сообщения)?
    2. Можно ли поставить модератора в раздел, в котором есть подразделы, но чтобы он был модератором только того раздела, куда его поставили и без подразделов?
     
  2. g0rn

    g0rn Постоялец

    Регистр.:
    3 июн 2007
    Сообщения:
    137
    Симпатии:
    63
    Нет, по умолчанию таких опций нет, нужно писать или искать специализированные хаки.
     
    Axom нравится это.
  3. Axom

    Axom

    Регистр.:
    25 апр 2007
    Сообщения:
    320
    Симпатии:
    94
    Не хотел новой темы создавать, может здесь кто нибудь поможет.

    Помогите заставить этот код обновлять информацию о сидерах и личерах почаще. Если можно, то раз в 10 мин.
    PHP:
    <?php
    /**
    * VBulletin Torrent Tracker v3.0 Beta 3.0.3
    * Coded by SqrtBoy & Toolmanwill (www.phpsoft.org)
    **/ 
     
    // ####################### SET PHP ENVIRONMENT ###########################
    error_reporting(E_ALL & ~E_NOTICE);
     
    // ######################### REQUIRE BACK-END ############################
    require_once('includes/config.php');
     
    // #################### DEFINE IMPORTANT CONSTANTS #######################
    define('THIS_SCRIPT''announce');
    define('NO_REGISTER_GLOBALS'1);
    define('TABLE_PREFIX'$config['Database']['tableprefix']);
     
    // ############################ FUNCTIONS ################################
     
    function err($string)
    {
        echo 
    'd14:failure reason'.strlen($string).':'.$string.'e';
        exit();
    }
     
    function 
    detect_client($peer_id)
    {
    // Last updated on 03/23/2006 based on http://wiki.theory.org/BitTorrentSpecification
     
    if (substr($peer_id,0,3) == "XBT")
        return 
    "XBT Client ".$peer_id{4}.".".$peer_id{5}.".".$peer_id{6};
    else if (
    substr($peer_id,0,4) == "exbc")
        return 
    "BitComet";
    else if (
    substr($peer_id,0,2) == "OP")
        return 
    "Opera 8 build".substr($peer_id,2,4);
    else if (
    substr($peer_id,0,3) == "-AZ")
        return 
    "Azureus ".$peer_id{3}.".".$peer_id{4}.".".$peer_id{5}.".".$peer_id{6};
    else if (
    substr($peer_id,0,3) == "-BB")
        return 
    "BitBuddy".$peer_id{3}.".".$peer_id{4}.".".$peer_id{5}.".".$peer_id{6};
    else if (
    substr($peer_id,0,3) == "-CT")
        return 
    "CTorrent ".$peer_id{3}.".".$peer_id{4}.".".$peer_id{5}.".".$peer_id{6};    
    else if (
    substr($peer_id,0,3) == "-MT")
        return 
    "MoonlightTorrent ".$peer_id{3}.".".$peer_id{4}.".".$peer_id{5}.".".$peer_id{6};
    else if (
    substr($peer_id,0,3) == "-LT")
        return 
    "Libtorrent ".$peer_id{3}.".".$peer_id{4}.".".$peer_id{5}.".".$peer_id{6};
    else if (
    substr($peer_id,0,3) == "-BX")
        return 
    "Bittorrent X ".$peer_id{3}.".".$peer_id{4}.".".$peer_id{5}.".".$peer_id{6};    
    else if (
    substr($peer_id,0,3) == "-TS")
        return 
    "TorrentStorm ".$peer_id{3}.".".$peer_id{4}.".".$peer_id{5}.".".$peer_id{6};
    else if (
    substr($peer_id,0,3) == "-UT")
        return 
    "uTorrent ".$peer_id{3}.".".$peer_id{4}.".".$peer_id{5}.".".$peer_id{6};
    else if (
    substr($peer_id,0,3) == "-QT")
        return 
    "QT 4 ".$peer_id{3}.".".$peer_id{4}.".".$peer_id{5}.".".$peer_id{6};
    else if (
    substr($peer_id,0,3) == "-BC")
        return 
    "BitComet ".$peer_id{3}.".".$peer_id{4}.".".$peer_id{5}.".".$peer_id{6};
    else if (
    substr($peer_id,0,3) == "-BL")
        return 
    "BitLord ".$peer_id{3}.".".$peer_id{4}.".".$peer_id{5}.".".$peer_id{6};
    else if (
    substr($peer_id,0,3) == "-SZ")
        return 
    "Shareaza ".$peer_id{3}.".".$peer_id{4}.".".$peer_id{5}.".".$peer_id{6};
    else if (
    substr($peer_id,0,3) == "-RT")
        return 
    "Retriever ".$peer_id{3}.".".$peer_id{4}.".".$peer_id{5}.".".$peer_id{6};
    else if (
    substr($peer_id,0,3) == "-LP")
        return 
    "Lphant ".$peer_id{3}.".".$peer_id{4}.".".$peer_id{5}.".".$peer_id{6};
    else if (
    substr($peer_id,0,3) == "-TN")
        return 
    "TorrentDotNet ".$peer_id{3}.".".$peer_id{4}.".".$peer_id{5}.".".$peer_id{6};
    else if (
    substr($peer_id,0,3) == "-SS")
        return 
    "SwarmScope ".$peer_id{3}.".".$peer_id{4}.".".$peer_id{5}.".".$peer_id{6};
    else if (
    substr($peer_id,0,3) == "-XT")
        return 
    "XanTorrent ".$peer_id{3}.".".$peer_id{4}.".".$peer_id{5}.".".$peer_id{6};
    else if (
    substr($peer_id,0,3) == "-BS")
        return 
    "BTSlave ".$peer_id{3}.".".$peer_id{4}.".".$peer_id{5}.".".$peer_id{6};
    else if (
    substr($peer_id,0,3) == "-ZT")
        return 
    "ZipTorrent ".$peer_id{3}.".".$peer_id{4}.".".$peer_id{5}.".".$peer_id{6};    
    else if (
    substr($peer_id,0,3) == "-AR")
        return 
    "Artic ".$peer_id{3}.".".$peer_id{4}.".".$peer_id{5}.".".$peer_id{6};
    else if (
    substr($peer_id,0,3) == "-SB")
        return 
    "Swiftbit ".$peer_id{3}.".".$peer_id{4}.".".$peer_id{5}.".".$peer_id{6};
    else if (
    substr($peer_id,0,3) == "-MP")
        return 
    "MooPolice ".$peer_id{3}.".".$peer_id{4}.".".$peer_id{5}.".".$peer_id{6};
    else if (
    substr($peer_id,0,3) == "-lt")
        return 
    "libTorrent ".$peer_id{3}.".".$peer_id{4}.".".$peer_id{5}.".".$peer_id{6};
    else if (
    substr($peer_id,0,1) == "S" && is_int(substr($peer_id,1,3)))
        return 
    "Shadow ".$peer_id{1}.".".$peer_id{2}.".".$peer_id{3};
    else if (
    substr($peer_id,0,1) == "U" && is_int(substr($peer_id,1,3)))
        return 
    "UPnP NAT Bit Torrent ".$peer_id{1}.".".$peer_id{2}.".".$peer_id{3};
    else if (
    substr($peer_id,0,1) == "T" && is_int(substr($peer_id,1,3)))
        return 
    "BitTornado ".$peer_id{1}.".".$peer_id{2}.".".$peer_id{3};
    else if (
    substr($peer_id,0,1) == "O" && is_int(substr($peer_id,1,3)))
        return 
    "Osprey Permaseed ".$peer_id{1}.".".$peer_id{2}.".".$peer_id{3};
    else if (
    substr($peer_id,0,2) == "M4" || substr($peer_id,0,2) == "M3")
        return  
    "Bittorrent ".str_replace("-",".",substr($peer_id,1,5));
    else if (
    substr($peer_id,0,1) == "A" || substr($peer_id,0,2) == "A")
        return  
    "ABC ".$peer_id{1}.".".$peer_id{2}.".".$peer_id{3};
    else
        return 
    "Unknown";
     
    }
     
    function 
    hash_where($name$hash) {
        
    $shhash preg_replace('/ *$/s'""$hash);
        return 
    "(".$name." = '" $hash "' OR ".$name." = '" $shhash "')";
    }
     
    function 
    not_hash_where($name$hash) {
        
    $shhash preg_replace('/ *$/s'""$hash);
        return 
    "(".$name." != '" $hash "' AND ".$name." != '" $shhash "')";
    }
     
    function 
    benc_str($s) {
        return 
    strlen($s) . ":".$s;
    }
     
    function 
    hex2bin($hex)
    {
            
    $result '';
            for (
    $i 0$i strlen($hex); $i += 2)
                    
    $result .= chr(hexdec(substr($hex,$i,2)));
            return 
    $result;
    }
     
    // #######################################################################
    // ######################## START MAIN SCRIPT ############################
    // #######################################################################
     
    header('Content-type: text/plain');
    header('Pragma: no-cache');
     
     
    // we rebuild the correct query string to be processed by the announce !
    $query $_SERVER["QUERY_STRING"];
     
    if (
    strpos($query,"?info_hash") !== false)
    {
    // ADDED BY DjKiruban START------------------------------------------------------
    $announce "http://www.yourdomaine.net/forum/announce.php";
    // ADDED BY DjKiruban END-------------------------------------------------------------    
     
        
    header("Location: ".$announce."?".str_replace("?info_hash","&info_hash",$query));
    }
     
     
    // this page can be requested only by bittorrent clients !
    /*
    $agent = $_SERVER["HTTP_USER_AGENT"];
    if ( strpos($agent, "Mozilla") === 0 || strpos($agent, "Opera") === 0|| strpos($agent, "Links") === 0 || strpos($agent, "Lynx") === 0 || strpos($agent, "curl") === 0) 
        err("You are not allowed to view this page with a browser"); 
     
    */
    /*
    $_GET['info_hash'] = hex2bin('d728d5a3266e5e3099366833f1b63ff69188060b');
    $_GET['ip'] = '83.10.10.10';
    $_GET['passkey'] = '4bec6b05aee6dcd590c564b80d7be24a';
    $_GET['port'] = rand(20, 120);
    $_GET['uploaded'] = rand(20, 120000);
    $_GET['downloaded'] = rand(20, 120000);
    $_GET['peer_id'] = 'S588-----gqQ8TqDeqaY';
    $_GET['left'] = 0; //rand(0, 3000000);
    $_GET['event'] = 'started';
    $_GET['numwant'] = 50;
    $_GET['compact'] = 0;
    */
     
     
     
    // we connect to the database
     
    $link mysql_connect($config['MasterServer']['servername'], $config['MasterServer']['username'], $config['MasterServer']['password']);
    if (!
    $link) {
       
    err ('VBTT 3.0: Database Error. Can\'t connect to database !');
    }
     
    // select the current db
    $db_selected mysql_select_db($config['Database']['dbname'], $link);
    if (!
    $db_selected) {
       
    err ('VBTT 3.0: Databse Error. Can\'t select database !');
    }
     
    // we parse the input of the client
     
    $req "passkey:info_hash:peer_id:!ip:port:uploaded:downloaded:left:!event:compact";
    foreach (
    explode(":"$req) as $x)
    {
        if (
    $x[0] == "!")
        {
            
    $x substr($x1);
            
    $opt 1;
        }
        else
            
    $opt 0;
     
        if (!isset(
    $_GET[$x]))
        {
            if (!
    $opt)
                
    err("VBTT 3.0: Error, missing key ($x)");
     
            
    $_GET[$x] = "";            
        }
     
        if (
    get_magic_quotes_gpc())
        {
            
    $GLOBALS[$x] = stripslashes($_GET[$x]);
        }
        else 
    $GLOBALS[$x] = $_GET[$x];
    }
     
    /*if (strpos($passkey, "?")) {
     
        $tmp = substr($passkey, strpos($passkey, "?"));
        $passkey = substr($passkey, 0, strpos($passkey, "?"));
        $tmpname = substr($tmp, 1, strpos($tmp, "=")-1);
        $tmpvalue = substr($tmp, strpos($tmp, "=")+1);
        $GLOBALS[$tmpname] = $tmpvalue;
     
    } */
     
     
    $info_hash bin2hex($info_hash);
     
    if (
    strlen($info_hash) != 40)
    {
        
    err('VBTT 3.0: Invalid info_hash submitted value');
    }
     
    if (
    strlen($passkey) != 32)
        
    err("VBTT 3.0: Invalid Passkey");
     
     
    // we retrieve the user ip address
     
    $ip $_SERVER['REMOTE_ADDR'];
    $agent detect_client($peer_id);
    $port $port;
    $uploaded $uploaded;
    $downloaded $downloaded;
    $left $left;
     
    $rsize 50;
    foreach(array(
    "num want""numwant""num_want") as $k)
    {
        if (isset(
    $_GET[$k]))
        {
            
    $rsize $_GET[$k];
            break;
        }
    }
     
    if (!
    $port || $port 0xffff)
        
    err("VBTT 3.0: Invalid port");
     
    $seeder = ($left == 0) ? "yes" "no";
    $info_hash strtolower($info_hash);
     
    // to be added in next beta
    // check if the user is authorized on tracker and usergroup allowed on tracker
     
    // Is peer already active on tracker ?
     
    $updateset = array();
     
    $res mysql_query("SELECT * FROM "TABLE_PREFIX ."peers WHERE passkey='".$passkey."' AND info_hash = '".$info_hash."' AND " hash_where("peer_id"$peer_id) ." LIMIT 1") or err("VBTT 3.0: ".mysql_error());
    $row mysql_fetch_array($res);
    // peer is already active on tracker
     
    if ($row
    {
        
    $self $row;
    }
    else
    {
    // we create the peer on the tracker for the given info_hash
     
     
     
            
    if ($event != "stopped")
            {
                
    $connectable "yes";
     
                
    // comment this part if you experience slow down and connection problems to server
                /*
     
                $sockres = @fsockopen($ip, $port, $errno, $errstr, 5);
                if (!$sockres)
                    $connectable = "no";
                else
                {
                    $connectable = "yes";
                    @fclose($sockres);
                }
     
                */            
     
                
    $ret mysql_query("INSERT INTO "TABLE_PREFIX ."peers ( passkey, connectable, info_hash, peer_id, ip, port, uploaded, downloaded, to_go, started, last_action, seeder, agent) VALUES ('".$passkey."','".$connectable."', '".$info_hash."', '" mysql_escape_string($peer_id) . "', '" $ip "', ".$port.", ".$uploaded.", ".$downloaded.", ".$left.", NOW(), NOW(), '".$seeder."','".$agent."')") or err("VBTT 3.0: ".mysql_error()); 
     
     
     
                if (
    $ret)
                {
     
                    if (
    $seeder == "yes")
     
                        
    $updateset[] = "seeders = seeders + 1";
     
                    else
     
                        
    $updateset[] = "leechers = leechers + 1";
     
                }
            }    
    }    
     
     
     
    // we output the list of peers on the tracker
     
    $fields "seeder, peer_id, ip, port, uploaded, downloaded, lastup, lastdown ,last_action";
    $limit "ORDER BY RAND() LIMIT $rsize";
     
    $res mysql_query("SELECT ".$fields." FROM "TABLE_PREFIX ."peers WHERE info_hash = '".$info_hash."' AND ".not_hash_where("peer_id"$peer_id)." ".$limit) or err("VBTT 3.0: ".mysql_error());
     
     
    if(
    $_GET['compact'] != 1)
    {
    $resp "d" benc_str("interval") . "i1800e" benc_str("peers") . "l";
    }
    else
    {
    $resp "d" benc_str("interval") . "i1800e5:"."peers";
    }
     
     
    $peer = array();
    while (
    $row mysql_fetch_array($res))
    {
        if(
    $_GET['compact'] != 1)
        {
     
            
    $row["peer_id"] = str_pad($row["peer_id"],20);
     
            
    $resp .= "d" .
                
    benc_str("ip") . benc_str($row["ip"]);
                if (!
    $_GET['no_peer_id']) {
                    
    $resp .= benc_str("peer id") . benc_str($row["peer_id"]);
                }
                
    $resp .= benc_str("port") . "i" $row["port"] . "e" .
                
    "e";
        }
        else
        {
            
    $peer[] = pack('Nn'ip2long($row["ip"]), $row["port"]);
            
    $peer_num++;    
        }
    }
     
     
     
    if (
    $_GET['compact']!=1)
    $resp .= "ee";
    else
    {
        for(
    $i=0;$i<$peer_num;$i++)
            {
                
    $o .= $peer[$i];
            }
    $resp .= strlen($o) . ':' $o 'e';
    }
     
     
    // we update user stats
     
    $selfwhere "passkey='".$passkey."' AND info_hash = '$info_hash' AND " hash_where("peer_id"$peer_id) ." LIMIT 1";
     
     
    $last_uploaded = isset($self['uploaded']) ? $self['uploaded'] : 0;
    $last_downloaded = isset($self['downloaded']) ? $self['downloaded'] : 0;
    $time= isset($self["last_action"]) ? (int)(strtotime"now" ) -  strtotime$self["last_action"] )) : 0;
    if (
    $time >0)
    {
        
    $ulspeed abs($uploaded $last_uploaded) / $time;
        
    $dlspeed abs($downloaded $last_downloaded) / $time;
    }
    else
    {
        
    $ulspeed 0;
        
    $dlspeed 0;    
    }
     
    $diff_uploaded max($uploaded $last_uploaded,0);
    $diff_downloaded max($downloaded $last_downloaded,0);
     
     
     
    mysql_query("UPDATE " TABLE_PREFIX "user SET ulspeed = ".$ulspeed.", dlspeed = ".$dlspeed.", uploaded = uploaded + ".$diff_uploaded.", downloaded = downloaded + ".$diff_downloaded."  WHERE passkey='".$passkey."'") or err("VBTT 3.0: ".mysql_error()); 
     
    // we update the peer stats
    if ($event == "stopped")
    {
            
    mysql_query("DELETE FROM "TABLE_PREFIX ."peers WHERE ".$selfwhere) or err("VBTT 3.0: ".mysql_error());
            if (
    mysql_affected_rows())
            {
                if (
    $seeder == "yes")
                    
    $updateset[] = "seeders = seeders - 1";
                else
                    
    $updateset[] = "leechers = leechers - 1";
            }
    }
    else
    {
     
     
        if (
    $event == "completed")
        {    
            
    $updateset[] = "completed = completed + 1";
            
    $updateset[] = "completed_by = CONCAT(completed_by,';".$self['userid']."')";
        }
     
     
        
    mysql_query("UPDATE "TABLE_PREFIX"peers SET ip = '" $ip "',agent='".$agent."', port = ".$port.", uploaded = ".$uploaded.", downloaded = ".$downloaded.", lastup = ".$last_uploaded.", lastdown = ".$last_downloaded.", ulspeed = ".$ulspeed.", dlspeed= ".$dlspeed.", to_go = ".$left.", last_action = NOW(), seeder = '".$seeder."' WHERE ".$selfwhere) or err("VBTT 3.0: ".mysql_error());
     
        if (
    $self["seeder"] != $seeder && isset($self["seeder"]) )
        {
            if (
    $seeder == "yes")
            {
                
    $updateset[] = "seeders = seeders + 1";
                
    $updateset[] = "leechers = leechers - 1";
            }
            else
            {
                
    $updateset[] = "seeders = seeders - 1";
                
    $updateset[] = "leechers = leechers + 1";
            }
        }
     
    }
     
     
    if (
    count($updateset))
        
    mysql_query("UPDATE " TABLE_PREFIX "attachment SET " join(","$updateset) . " WHERE info_hash = '".$info_hash."'") or err("VBTT 3.0: ".mysql_error());
     
     
    if (
    $_SERVER["HTTP_ACCEPT_ENCODING"] == "gzip") {
        
    header("Content-Encoding: gzip");
        echo 
    gzencode($resp9FORCE_GZIP);

    else echo 
    $resp;
     
    ?> 
     
  4. Axom

    Axom

    Регистр.:
    25 апр 2007
    Сообщения:
    320
    Симпатии:
    94
    Народ, ну помогите пожалуйста, уже замучился :(((
     
  5. moyaufa

    moyaufa Создатель

    Регистр.:
    15 дек 2007
    Сообщения:
    26
    Симпатии:
    4
    необходимо писать самому!
     
  6. g0rn

    g0rn Постоялец

    Регистр.:
    3 июн 2007
    Сообщения:
    137
    Симпатии:
    63
    Не совсем тебя понял... То есть сейчас он обновляет информацию, только при обращнии к нему? или как? Если так, то поставь его через админку воблы в запланированные задачи...
     
    Axom нравится это.
  7. Axom

    Axom

    Регистр.:
    25 апр 2007
    Сообщения:
    320
    Симпатии:
    94
    g0rn, там было уже прописано из xml файла, но обновлялось только раз в месяц, поменял настройки, помогло, спасибо!

    Вот ещё один баг, когда появляются скачавшие, то вылазиет вот что вместо темы:
    SELECT userid,username FROM user WHERE userid IN (360, 322, 322, );

    MySQL Error : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1

    Походу что-то не то в этом коде, или надо мисульку обновить с 4 до 5?:
    $query_user = $db->query("SELECT userid,username FROM " . TABLE_PREFIX . "user WHERE userid IN (" .str_replace(";",", ",$attachment[completed_by]). ")");
     
  8. g0rn

    g0rn Постоялец

    Регистр.:
    3 июн 2007
    Сообщения:
    137
    Симпатии:
    63
    Попробуй так:
    Замени
    PHP:
    str_replace(";",", ",$attachment[completed_by])
    на
    PHP:
    str_replace(";",", ",substr($attachment[completed_by], 0strlen($attachment[completed_by])-1))
     
    Axom нравится это.
  9. Axom

    Axom

    Регистр.:
    25 апр 2007
    Сообщения:
    320
    Симпатии:
    94
    От ошибки помогло, но теперь не все и не те скачавшие отображаются :)

    Вот так выглядет код:
    PHP:
     if ($attachment[completed_by] != "")
     { 
      if (
    $attachment[completed_by]{0} == ";")
       
    $attachment[completed_by] = substr($attachment[completed_by],1);
       
      
    $query_user $db->query("SELECT userid,username FROM " TABLE_PREFIX "user WHERE userid IN (" .str_replace(";",", ",substr($attachment[completed_by], 0strlen($attachment[completed_by])-1)). ")");
         while (
    $result_user $db->fetch_array($query_user) )
      {    
      
    $s .= '<a href="member.php?u='.$result_user['userid'].'">'.$result_user['username'].'</a>, ';
      }
      
      
    $s substr($s,0,-2)."</td>";
     }
     else 
     {
      
    $s .= "Nobody has completed this torrent yet !</td>";
     }
     
      
    $s.="<td width=\"25%\" align=\"right\">";
      
      require_once(
    'charts.php');
     
  10. g0rn

    g0rn Постоялец

    Регистр.:
    3 июн 2007
    Сообщения:
    137
    Симпатии:
    63
    Ммм.. А попробуй перед
    PHP:
     if ($attachment[completed_by] != "")
    Поставить exit($attachment[completed_by]); или echo($attachment[completed_by]); или var_dump($attachment[completed_by]); ну и собственно написать сюда результат - значение переменной $attachment[completed_by].
    Потом буду смотреть, что не так.
     
Статус темы:
Закрыта.