true, // Список "проксируемых" трекеров 'allow' => [ 'rutracker' => [ 'hosts' => [ 'bt.t-ru.org', 'bt2.t-ru.org', 'bt3.t-ru.org', 'bt4.t-ru.org', 'bt.rutracker.cc', 'bt2.rutracker.cc', 'bt3.rutracker.cc', 'bt4.rutracker.cc', ], // Адрес анонсера на данном трекере 'uri' => '/ann', // Заменить на актуальный пасскей, либо закомментировать, если проверка не требуется 'check' => [ 'pk' => '0123456789abcdef', ], ], ], ]; /******************************************************************************/ $_GET['ip'] = $_SERVER['REMOTE_ADDR']; $host = $_GET['dst']; unset($_GET['dst']); $uri = null; foreach ($config['allow'] as $item) { // Разрешаем проксирование только для известных хостов if (in_array($host, $item['hosts'])) { $uri = $item['uri']; // Проверяем допустимые для данного трекера параметры в запросе, например пасскей foreach ($item['check'] as $key => $value) { if (!isset($_GET[$key]) || $_GET[$key] != $value) { $uri = null; break; } } break; } } if ($uri) { $announce = "http://{$host}{$uri}?" . http_build_query($_GET); $ses = curl_init($announce); curl_setopt_array($ses, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 20, CURLOPT_USERAGENT => $_SERVER['HTTP_USER_AGENT'], // Может проверяться анонсером ]); $result = curl_exec($ses); $info = curl_getinfo($ses); header("Content-Type: {$info['content_type']}", true, $info['http_code']); print $result; } else { header('Content-Type: text/plain', true, 404); } if ($config['log']) { // Сохраняем лог запроса/ответа для отладки $logfile = __DIR__ . '/btlog/' . date('Y-m-d/U') . '.txt'; mkdir(dirname($logfile), 0700, true); file_put_contents( $logfile, var_export($_GET, true) . PHP_EOL . PHP_EOL . var_export($_POST, true) . PHP_EOL . PHP_EOL . var_export($_SERVER, true) . PHP_EOL . PHP_EOL . var_export($info, true) . PHP_EOL . PHP_EOL . $result ); } ?>