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
5 лет в сервисе
Был
2 года назад

Заявки фрилансеров

Нет заявок фрилансеров
  • Похожие заказы

  • Требуется разработка внутренних страниц для городов на MODx с возможностью изменения адресов на карте и контактах. Необходимо создать категории с описаниями и изображениями, при этом товары должны оставаться общими. Добавить всплывающее окно с городами и функционал для редактирования номеров телефонов и блока 'наши клиенты' для каждого города отдельно.

    Завершен
    2 года назад
  • Требуется доработать сайт на Wordpress, исправить ошибки и реализовать функциональность: мультиязычность, регистрация и авторизация пользователей с загрузкой фотографий, личный кабинет и ведение рейтинга пользователей. Предоставляется детальное ТЗ. Оплата поэтапная.

    Закрыт
    2 года назад
  • Требуется внедрить функцию определения операционной системы на сайт vpn.web2best.com. Необходимо использовать предоставленный PHP-скрипт для корректной работы. Ожидается подготовка и интеграция кода на веб-страницу.

    Закрыт
    2 года назад
  • $10

    Необходимо реализовать jQuery-скрипт, который будет скрывать и показывать три div'а в зависимости от нажатия кнопки поиска и полученных результатов от сервера. При нажатии кнопки показывается div3 и скрываются div1 и div2. После получения ответа от сервера, если ответ не пустой, скрывается div3 и показывается div1 с результатами. Если ответ пустой, показывается div2 с ошибкой. Анимация переходов должна длиться 0.5 секунды.

    Завершен
    2 года назад
  • Требуются правки самописного компонента и шаблона Joomla. Задача требует уверенных навыков веб-программирования, уровень сложности выше среднего. Техническое задание будет предоставлено по запросу.

    Закрыт
    2 года назад
  • Требуется специалист по React.js для разработки сайта объявлений о продаже автомобилей. Дизайн уже создан в Figma, контент будет поступать в формате JSON. Ищется свободный фрилансер для немедленного начала работы. Подробное техническое задание будет отправлено выбранным кандидатам.

    Закрыт
    2 года назад
  • Требуется подключить систему оплаты на сайт, созданный на платформе Tilda. Возможна работа напрямую на Tilda или выгрузка сайта на другой хостинг. Укажите ваши предложения и решения для реализации задачи.

    Закрыт
    2 года назад
  • Требуется опытный разработчик PHP Laravel и VueJS для доработки сервиса для грузинских ресторанов. Задачи включают разработку интерфейса для работы с несколькими аккаунтами, оптимизацию запросов к БД, улучшение производительности и создание плагина для эквайринга. Опыт работы с API и решение производственных задач обязательны.

    Закрыт
    2 года назад