Listing 1823
Submitted by Arsenyev, 7 December 2008
$userAgents = array( 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.9) Gecko/20071025 Firefox/2.0.0.9', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.2) Gecko/20070221 SUSE/2.0.0.2-6.1 Firefox/2.0.0.2', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8) Gecko/20051107 Firefox/1.5', 'Opera/9.50 (Windows NT 5.1; U; ru)', 'Opera/9.23 (Windows NT 5.1; U; ru)', 'Opera/9.10 (Windows NT 5.1; U; en)', 'Opera/9.02 (Windows NT 5.1; U; en)', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)', 'Mozilla/4.0 (compatible; MSIE 6.0; MSN 2.5; Windows 98)', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Avant Browser [avantbrowser.com]; iOpus-I-M; QXW03416; .NET CLR 1.1.4322)', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20060127 Netscape/8.1', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20050519 Netscape/8.0.1', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru) AppleWebKit/522.15.5 (KHTML, like Gecko) Version/3.03 Safari/522.15.5', 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/521.25 (KHTML, like Gecko) Safari/521.24', 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en) AppleWebKit/418.9 (KHTML, like Gecko) Safari/419.3' ); set_time_limit(60*15); $explode = explode("/", $_SERVER['REQUEST_URI']); list(, $csid, $uid, $pid, $fname, $name) = $explode; #print_r($explode); #print $csid; if(!is_numeric($csid) or !is_numeric($uid) or !is_numeric($pid) or !eregi('^[0-9a-zA-Z]+$',$fname)) { die("wrong url"); } #header("Cache-Control: max-age=1468800"); #header("Content-Type: audio/mpeg"); $ch = curl_init(); // Функция обработки заголовков // Выдираем размер файла и устанавливаем заголовки // В противном случае пишем об ошибке function on_curl_header($ch, $header) { $trimmed = rtrim($header); if (preg_match('/^Content-Length: (\d+)$/', $trimmed, $matches)) { header("Cache-Control: max-age=1468800"); header("Content-Type: audio/mpeg"); header("Content-Length: ".$matches[1]); header("Accept-Ranges: bytes"); // Если есть смещение global $range; if ($range) { header("HTTP/1.1 206 Partial Content"); } else { header("HTTP/1.1 200 OK"); } if (ob_get_level() == 0) { ob_start(); } } return strlen($header); } // Если запрашивающий агент поддерживает докачку if ($_SERVER['HTTP_RANGE']) { $range = $_SERVER['HTTP_RANGE']; $range = str_replace("bytes=", "", $range); $range = str_replace("-", "", $range); } function on_curl_read($ch, $data) { $bytes = strlen($data); $GLOBALS['file_size'] += $bytes; #if($GLOBALS['file_size'] > 1024*10) die(); print $data; ob_flush(); flush(); return $bytes; } curl_setopt_array($ch, array( CURLOPT_HEADER => false, CURLOPT_NOBODY => false, CURLOPT_HEADERFUNCTION => 'on_curl_header', CURLOPT_WRITEFUNCTION => 'on_curl_read', CURLOPT_TIMEOUT => "60", CURLOPT_REFERER => 'http://vkontakte.ru/audiosearch.php', CURLOPT_USERAGENT => $userAgents[ array_rand($userAgents) ], CURLOPT_PROXY => 'hidden', CURLOPT_PROXYUSERPWD => 'vkontakte'.$pid.':hidden', CURLOPT_HTTPPROXYTUNNEL=> 1 )); // смещаемся по файлу на нужное смещение if ($_SERVER['HTTP_RANGE'] and $range) { curl_setopt($ch, CURLOPT_RESUME_FROM, $range); } curl_setopt($ch, CURLOPT_URL, "http://cs".$csid.".vkontakte.ru/u".$uid."/audio/".$fname.".mp3"); curl_exec($ch); curl_close($ch); ob_end_flush();

