Задать вопрос
@omichkun

Какой html5 аудиоплеер выбрать, чтобы умел скрывать источник проигрывания?

Вопрос в следующем - необходимо проигрывать файлы на сайте, но так, чтобы ни в исходниках страницы, ни где ещё не было видно фактическое месторасположение файла. То есть, чтобы его нельзя было скачать напрямую (без авторизации).
Подскажите, в какую сторону копать, я немного в растерянности. И вообще, можно ли так сделать?
  • Вопрос задан
  • 2373 просмотра
Подписаться 2 Оценить Комментировать
Решения вопроса 2
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
UPD2: а ну обработчик отдачи файла свой делаете и все. В нем проверяете авторизацию (через обычную сессию) и если все ок, отдаёте *.mp3.
Файлы даже можно оставить на месте как есть и не переименовывать. Ставите перехватчик запросов к .mp3 через mod_rewrite на обработчик и все.
Ответ написан
Комментировать
@omichkun Автор вопроса
В общем, разобрался сам.
На всякий случай на будущее отвечу сам.
Если кратко - необходимо создать файл php, подставить туда необходимые заголовки и прочитать из него нужный аудиофайл. Нужный файл возьмётся из сессии или гет-переменной (кому как удобнее).

В простейшем виде это будет выглядеть примерно вот так:

<?php
//стартуем сессию, чтобы работали сессионные переменные
session_start();

//ниже классы для подключения к базе и запроса нужной инфы из неё (путь к файлу и имя файла)
class DB extends PDO
{
	public $dsn = 'mysql:host=127.0.0.1;dbname=database';
	public $user= 'root';
	public $pass= 'password';
	public $opt = array(PDO::ATTR_ERRMODE=> PDO::ERRMODE_EXCEPTION,PDO::ATTR_DEFAULT_FETCH_MODE=>PDO::FETCH_ASSOC,PDO::ATTR_EMULATE_PREPARES=>false);
	public function __construct()
	{
		parent::__construct($this->dsn, $this->user, $this->pass);
		parent::exec("SET NAMES utf8");
	}
}


class Connect{
        private static $instance=null;
        private function __construct() {}
        private function __clone() {}
        public static function run() {
            if (self::$instance == NULL) {
                        self::$instance = new DB();
                        }
                return self::$instance;
        }
        final public function __destruct() {
            self::$_instance = null;
        }
}

class Data{
		var $path;
		var $filename;


function getDataByID($id){
			$pdo = Connect::run();
			$query = $pdo->prepare("SELECT * FROM data WHERE id = ? LIMIT 1");
			$query->execute(array($id));
			$count = $query->rowCount();
			if($count>0){
				$row = $query->fetch();
				$this->path = $row['file_path'];
				$this->filename= $row['filename'];
				return true;
			}
			else{
				return false;
			}
		}
}
	
//проверяем наличие сессионной переменной
	if (isset($_SESSION['id']) && !empty($_SESSION['id'])){
		$data= new Data;
		$data->getDataByID($_SESSION['id']);
		
		
		$file = $data->path.'/'.$data->filename; //вставляем полученные из БД данные 
		if (file_exists($file)) { //проверяем наличие файла 
				header("Content-Transfer-Encoding: binary"); 
				header('Content-Length: '. (string)filesize($file)); // пишем размер файла
				header('Content-type: audio/wav');
				header('Cache-Control: no-cache');
				readfile($file);
				exit;
		}
}


Вот как-то так.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
SagePtr
@SagePtr
Еда - это святое
Стеганографию применить, к примеру, напихать на страницу фотки с котейками, а в фотки напихать аудиофайл, который впоследствии собрать скриптом.
Ответ написан
Комментировать
Sanasol
@Sanasol
нельзя просто так взять и загуглить ошибку
Временные ссылки на видео - защита от хотлинка
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы