У меня есть музыкальный плеер, который ссылается на песню, используя следующий синтаксис:
<li><a href="" data-src="http://s3.amazonaws.com/audiojs/02-juicy-r.mp3">title</a></li>
Есть ли способ, который я мог бы выполнить на стороне сервера, а затем отображаться как (см. Ниже) для пользователя?
Во время поиска я сталкивался с этим … Мне нравится идея наличия внешнего файла с данными … например:
<?php // get-file.php // call with: http://yoururl.com/path/get-file.php?id=1 $id = (isset($_GET["id"])) ? strval($_GET["id"]) : "1"; // lookup $url[1] = 'link.mp3'; $url[2] = 'link2.mp3'; header("Location: $url[$id]"); exit; ?>
затем используя: http://yoururl.com/path/get-file.php?id=1 как ссылку … единственная проблема заключается в том, что при вводе http://yoururl.com/path/get-file. php? id = 1 пользователь идет прямо в файл … есть ли способ отключить эту способность … может быть, какой-то код на get-file.php сам?
Хорошо, поэтому я сделал комбинацию вещей, которым я доволен … хотя и не полностью безопасным, это определенно помогло мне немного скрыть его.
Прежде всего, я использую плеер AudioJS для воспроизведения музыки, который можно найти: http://kolber.github.com/audiojs/
В основном, что я сделал:
Итак, теперь мой встроенный javascript выглядит так:
<script type="text/javascript"> $(function() { // Play entire album var a = audiojs.createAll({ trackEnded: function() { var next = $("ul li.playing").next(); if (!next.length) next = $("ul li").first(); next.addClass("playing").siblings().removeClass("playing"); audio.load($("a", next).attr("key") + "mp3"); audio.play(); } }); // Load the first song var audio = a[0]; first = $("ul a").attr("key") + "mp3"; $("ul li").first().addClass("playing"); audio.load(first); // Load when clicked $("ul li").click(function(e) { e.preventDefault(); $(this).addClass("playing").siblings().removeClass("playing"); audio.load($('a', this).attr('key') + "mp3"); audio.play(); }); }); </script>
и<script type="text/javascript"> $(function() { // Play entire album var a = audiojs.createAll({ trackEnded: function() { var next = $("ul li.playing").next(); if (!next.length) next = $("ul li").first(); next.addClass("playing").siblings().removeClass("playing"); audio.load($("a", next).attr("key") + "mp3"); audio.play(); } }); // Load the first song var audio = a[0]; first = $("ul a").attr("key") + "mp3"; $("ul li").first().addClass("playing"); audio.load(first); // Load when clicked $("ul li").click(function(e) { e.preventDefault(); $(this).addClass("playing").siblings().removeClass("playing"); audio.load($('a', this).attr('key') + "mp3"); audio.play(); }); }); </script>
и<script type="text/javascript"> $(function() { // Play entire album var a = audiojs.createAll({ trackEnded: function() { var next = $("ul li.playing").next(); if (!next.length) next = $("ul li").first(); next.addClass("playing").siblings().removeClass("playing"); audio.load($("a", next).attr("key") + "mp3"); audio.play(); } }); // Load the first song var audio = a[0]; first = $("ul a").attr("key") + "mp3"; $("ul li").first().addClass("playing"); audio.load(first); // Load when clicked $("ul li").click(function(e) { e.preventDefault(); $(this).addClass("playing").siblings().removeClass("playing"); audio.load($('a', this).attr('key') + "mp3"); audio.play(); }); }); </script>
Моя ссылка выглядит так:
<a href="<?php $link = 'http://itunes.apple.com/us/album/falling/id504779876?i=504779883&uo=4'; $obfuscatedLink = ""; for ($i=0; $i<strlen($link); $i++){ $obfuscatedLink .= "&#" . ord($link[$i]) . ";"; } echo $obfuscatedLink; ?>" target="itunes_store" key="<?php $link = './8249795872/9273847591.'; $obfuscatedLink = ""; for ($i=0; $i<strlen($link); $i++){ $obfuscatedLink .= "&#" . ord($link[$i]) . ";"; } echo $obfuscatedLink; ?>">Falling</a>
Когда вы загружаете его в браузере и просматриваете источник, вы увидите:
<a href="http://itunes.apple.com/us/album/falling/id504779876?i=504779883&uo=4" target="itunes_store" key="./8249795872/9273847591.">Falling</a>
Затем, когда вы используете Web Inspector или Firebug, вы увидите:
<a href="http://itunes.apple.com/us/album/falling/id504779876?i=504779883&uo=4" target="itunes_store" key="./8249795872/9273847591.">Falling</a> - *which doesn't completely give the url away
В основном, я сделал, чтобы ссылка выглядела так, как будто это api-ключ. Самое приятное, что вы не можете просто скопировать ссылку прямо из источника просмотра или прямо из Web Inspector / Firebug. Это не безупречно и может быть сломано, но пользователь должен знать, что они делают. Он удерживает большинство людей, но все же позволяет игроку получить URL-адрес, необходимый для воспроизведения песни 🙂
* Кроме того, я получил php obfusticate script откуда-то на Stack Exchange, просто не знаю, где.
Спасибо за помощь! Надеюсь, это поможет кому-то еще попытаться сделать то же самое!
мистифицировать
Вместо того, чтобы делать перенаправление заголовка, добавляйте соответствующие заголовки и включайте аудиофайл в свой PHP-код. Затем в вашем файле .htaccess вы можете запретить доступ к каталогу, в котором живут ваши аудиофайлы.
Если вы используете службу amazon s3, вы можете использовать подписанный URL для своих файлов. Он будет более безопасным, поскольку вы должны быть подписаны пользователем, а также срок действия url может быть истек. Прочтите это .
Нет. Это невозможно, поскольку браузер интерпретирует HTML, чтобы страница работала правильно. Поэтому, если клиент (браузер) не знает, откуда будет поступать mp3, он не будет использоваться.
С другой стороны, если вы хотите, чтобы музыка переключилась на песни, нажав ссылку, я предлагаю вам изучить некоторые инструменты, такие как http://jplayer.org/
EDIT: Единственный способ предотвратить прямой доступ к самому файлу – это прочитать файл вместо ссылки на него из скрипта. Например, на моем сайте хостинга изображений http://img.ruphp.com/php/logo_huge_domains.gif, и если вы хотите посмотреть фактический путь к файлу на моем сервере, файл CVN5Qm.jpg не доступен из папки public_html , Нет прямого доступа к файлу. Я использую базы данных, чтобы взять идентификатор изображения, посмотреть, где он хранится, а затем прочитать файл () в скрипт и отобразить соответствующие заголовки для вывода изображения.
Надеюсь это поможет
Я использую http_referer, и я могу контролировать процедуру ссылки
<?php // key.php // call with: http://yoururl.com/path/key.php?id=1 $page_refer=$_SERVER['HTTP_REFERER']; if ($page_refer=="http://www.yourdomine.com/path/page.html") { $id = (isset($_GET["id"])) ? strval($_GET["id"]) : "1"; // lookup $url[1] = 'link1.mp3'; $url[2] = 'link2.mp3'; header("Location: $url[$id]"); exit; } else { exit; } ?>