Потоковое защищенное мультимедиа (расположенное вне httpdocs) с помощью jPlayer - PullRequest
0 голосов
/ 10 марта 2012

Я загрузил несколько примеров mp3-файлов в каталог за пределами httpdocs, я убедился, что это доступно для PHP, правильно настроив open_basedir и проверил, работает ли этот каталог.

Что я хотел бы сделатьЭто потоковая передача этих файлов через файл PHP, поскольку пользователи, не прошедшие проверку подлинности, никогда не должны иметь доступ к этим файлам.В настоящее время я использую jPlayer и ожидаю, что функция setMedia должна выглядеть примерно так:

$("#jquery_jplayer").jPlayer("setMedia", { mp3: "stream.php?track=" + id + ".mp3" });

Я попытался установить заголовки содержимого и т. Д. В stream.php, и в настоящее время это выглядит так:

$filePath = "../song_files/mp3/";
$fileName = "$_GET[track].mp3";

header("Content-Type: audio/mpeg");
header('Content-Disposition: attachment; filename="'.$fileName.'"');

getFile($filePath + $fileName);

Если я загружаю эту страницу напрямую, файл mp3 скачивается и воспроизводится нормально, но когда я использую вышеуказанный javascript, jPlayer не воспроизводит дорожку.

Я посмотрел этот пост ( Потоковая передача MP3 на стандартный вывод на Jplayer с использованием PHP ), и кажется, что пользователь пытался достичь именно того, чего я хочу, но после тестирования решенияЯ продолжаю сталкиваться с проблемой, все, что я получаю, это "Сбой CURL".

Существуют ли какие-либо другие методы, которые я могу использовать для достижения этой цели.Я буду очень признателен за указание в правильном направлении.

1 Ответ

0 голосов
/ 12 марта 2012

После поиска еще я нашел решение, которое работает нормально.Я использовал код из аналогичной темы ( PHP для защиты PDF и DOC )

Я разместлю код, который использовал здесь, чтобы помочь правильно ответить на вопрос:

//check users is loged in and valid for download if not redirect them out
// YOU NEED TO ADD CODE HERE FOR THAT CHECK
// array of support file types for download script and there mimetype
$mimeTypes = array(
    'doc' => 'application/msword',
    'pdf' => 'application/pdf',
);
// set the file here (best of using a $_GET[])
$file = "../documents/file.doc";

// gets the extension of the file to be loaded for searching array above
$ext = explode('.', $file);
$ext = end($ext);

// gets the file name to send to the browser to force download of file
$fileName = explode("/", $file);
$fileName = end($fileName);

// opens the file for reading and sends headers to browser
$fp = fopen($file,"r") ;
header("Content-Type: ".$mimeTypes[$ext]);
header('Content-Disposition: attachment; filename="'.$fileName.'"');

// reads file and send the raw code to browser     
while (! feof($fp)) {
    $buff = fread($fp,4096);
    echo $buff;
}
// closes file after whe have finished reading it
fclose($fp);
...