Найдите исполнителя для вашего проекта прямо сейчас!
Разместите заказ на фриланс-бирже и предложения поступят уже через несколько минут.

function base64url_encode($s) {

return str_replace(array('+', '/'), array('-', '_'), base64_encode($s));

}

function base64url_decode($s) {

return base64_decode(str_replace(array('-', '_'), array('+', '/'), $s));

}

function remoteFilesize($url) {

$head = get_headers($url, 1);

print_r($head);

return isset($head['Content-Length']) ? $head['Content-Length'] : "unknown";

}

$link = $_REQUEST['mplay'];

$link = base64url_decode($link);

$size = remoteFilesize($link);

stream($link, 'audio/mpeg');

function stream($file, $content_type = 'application/octet-stream') {

global $size;

@error_reporting(0);

$filesize = $size;

if(isset($_SERVER['HTTP_RANGE'])){

$range = $_SERVER['HTTP_RANGE'];

}elseif($apache = apache_request_headers()){

$headers = array();

foreach ($apache as $header => $val){

$headers[strtolower($header)] = $val;

}

if(isset($headers['range'])){

$range = $headers['range'];

}

else $range = FALSE;

} else $range = FALSE;

if($range){

$partial = true;

list($param, $range) = explode('=',$range);

if(strtolower(trim($param)) != 'bytes'){

header("HTTP/1.1 400 Invalid Request");

exit;

}

$range = explode(',',$range);

$range = explode('-',$range[0]);

if ($range[0] === ''){

$end = $filesize - 1;

$start = $end - intval($range[0]);

} else if ($range[1] === '') {

$start = intval($range[0]);

$end = $filesize - 1;

}else{

$start = intval($range[0]);

$end = intval($range[1]);

if ($end >= $filesize || (!$start && (!$end || $end == ($filesize - 1)))) $partial = false;

}

$length = $end - $start + 1;

} else $partial = false;

header("Content-Type: $content_type");

header("Content-Length: $filesize");

header('Accept-Ranges: bytes');

header("Content-Disposition: attachment; filename=\"stream.mp3\"");

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $file);

if ($range) {

curl_setopt($ch, CURLOPT_RANGE, $range . '-' . $size);

}

curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);

$result = curl_exec($ch);

curl_close($ch);

if ($partial) {

header('HTTP/1.1 206 Partial Content');

header("Content-Range: bytes $start-$end/$filesize");

if ($start) stream_get_contents($fp, 0, $start);

while($length){

set_time_limit(0);

$read = ($length > 8192) ? 8192 : $length;

$length -= $read;

print(fread($fp,$read));

}

fclose($fp);

}

else readfile($file);

exit;

}

?>

Парсер получает ссылку и передает в ретранслятор в виде https://site.ru/mplay.php?mplay=aHR0cHM6Ly9tb29zaWMubXkubWFpbC5ydS9maWxlL2ZjNWJiODA0NWY4ZDNiNTM2YTRhNjVlOTNhOWI3NjUzLm1wMw==

Но скачивание и прослушивание доступно для авторизированных пользователей Mail.ru

Нужно что бы ретранслятор авторизовался перед отдачей файла и хранил куки сессии дабы каждый раз не авторизоваться

2 года назад
guest_1577592274059
4 года в сервисе
Был
год назад