PhpRiot

Listing 1823

Submitted by Arsenyev, 7 December 2008
<?php
$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();
 
// &#1060;&#1091;&#1085;&#1082;&#1094;&#1080;&#1103; &#1086;&#1073;&#1088;&#1072;&#1073;&#1086;&#1090;&#1082;&#1080; &#1079;&#1072;&#1075;&#1086;&#1083;&#1086;&#1074;&#1082;&#1086;&#1074;
// &#1042;&#1099;&#1076;&#1080;&#1088;&#1072;&#1077;&#1084; &#1088;&#1072;&#1079;&#1084;&#1077;&#1088; &#1092;&#1072;&#1081;&#1083;&#1072; &#1080; &#1091;&#1089;&#1090;&#1072;&#1085;&#1072;&#1074;&#1083;&#1080;&#1074;&#1072;&#1077;&#1084; &#1079;&#1072;&#1075;&#1086;&#1083;&#1086;&#1074;&#1082;&#1080;
// &#1042; &#1087;&#1088;&#1086;&#1090;&#1080;&#1074;&#1085;&#1086;&#1084; &#1089;&#1083;&#1091;&#1095;&#1072;&#1077; &#1087;&#1080;&#1096;&#1077;&#1084; &#1086;&#1073; &#1086;&#1096;&#1080;&#1073;&#1082;&#1077;
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");
        // &#1045;&#1089;&#1083;&#1080; &#1077;&#1089;&#1090;&#1100; &#1089;&#1084;&#1077;&#1097;&#1077;&#1085;&#1080;&#1077;
        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); 
} 
 
 // &#1045;&#1089;&#1083;&#1080; &#1079;&#1072;&#1087;&#1088;&#1072;&#1096;&#1080;&#1074;&#1072;&#1102;&#1097;&#1080;&#1081; &#1072;&#1075;&#1077;&#1085;&#1090; &#1087;&#1086;&#1076;&#1076;&#1077;&#1088;&#1078;&#1080;&#1074;&#1072;&#1077;&#1090; &#1076;&#1086;&#1082;&#1072;&#1095;&#1082;&#1091;
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
            ));
 
 // &#1089;&#1084;&#1077;&#1097;&#1072;&#1077;&#1084;&#1089;&#1103; &#1087;&#1086; &#1092;&#1072;&#1081;&#1083;&#1091; &#1085;&#1072; &#1085;&#1091;&#1078;&#1085;&#1086;&#1077; &#1089;&#1084;&#1077;&#1097;&#1077;&#1085;&#1080;&#1077;
 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();
?>
Submit a Follow Up