Здравствуйте, сегодня я расскажу вам, как с помощью чистого php можно создать своё радио.
Схема будет следующая: администратор(dj) посылает на сервер название песни, в это время слушатель посылает запрос на сервер с частотой t секунд. Далее если у слушателя стоит не тот трек, который загрузил администратор, то у него открывается новый трек.
Таким образом при изменении трека слушатель будет автоматически его менять.
Начнём с основной страницы, которую будет видеть слушатель, назовём её listenme.php:
Далее создадим скрипт проигрывания музыки, назовём его listen.php:
А теперь самое интересное, создадим админ-панель и обработчик ajax запросов, как было видно в первом скрипте, его стоит назвать index.php:
Спасибо за внимание!
Вот таким образом можно создать простое интернет-радио…
Плеер я использовал этот: habrahabr.ru/blogs/web_design/10864 чтобы не усложнять загрузку.
Теория
Схема будет следующая: администратор(dj) посылает на сервер название песни, в это время слушатель посылает запрос на сервер с частотой t секунд. Далее если у слушателя стоит не тот трек, который загрузил администратор, то у него открывается новый трек.
Таким образом при изменении трека слушатель будет автоматически его менять.
Практика
Начнём с основной страницы, которую будет видеть слушатель, назовём её listenme.php:
<html>
<head>
<title>AK Radio</title>
<meta http-equiv="content-type" content="text/html; charset=windows-1251">
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
$(document).ready(function () {
setInterval("Load();", 250);
});
var last_id = 0;
var load_in_process = false;
function Load() { // Функция создания запроса
if(!load_in_process) // Если загрузка ещё не началась(в случае медленного сервера или интернет-соединения)
{
load_in_process = true; // Говорим, что загрузка идёт
$.get("index.php", // Создаём запрос
{
p: "ajax", // Указываем, что мы загружаем данные о текущем треке
last: last_id // передаём id текущего трека
},
function (result) { // Функция получения результата
eval(result); // Исполняем полученный скрипт
load_in_process = false; // Говорим, что загрузка завершена
});
}
}
</script>
<body>
<center>Более-менее полноценное радио)</center>
<div id="main">Этот div нужен, чтобы выводить в него iframe с музыкой</div>
</body>
</html>
Далее создадим скрипт проигрывания музыки, назовём его listen.php:
<?php
if(isset($_GET['name'])){ // если нам дано название песни
echo '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="96" height="20" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="mp3_player.swf?file=music/'.$name.'&startplay=true" />
<embed src="mp3_player.swf?file=music/'.$name.'&startplay=true" quality="high" width="96" height="20" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>'; // выводим плеер
}
?>
А теперь самое интересное, создадим админ-панель и обработчик ajax запросов, как было видно в первом скрипте, его стоит назвать index.php:
<?php
$main_text = "<head>\n<script>\n function ctrlEnter(event, formElem){ \n if((event.ctrlKey) && ((event.keyCode == 0xA)||(event.keyCode == 0xD))){ \n formElem.submit.click(); \n } \n } \n </script> \n </head> \n <center> \n <h1>AK Radio</h1> \n Standart code: <form action=index.php method=post> \n <input type=hidden name=p value=new> \n <input type=text name=text value=Text> \n <input type=submit value=Ok> \n </form></br> \n Large text: <form action=index.php method=post onkeydown='ctrlEnter(event, this);'><input type=hidden name=p value=new><input type=hidden name=l value=1><textarea name=text cols=50 rows=10></textarea></br><input type=submit value=Отправить></form></br> Music: <form action=index.php method=post><input type=hidden name=p value=new><input type=hidden name=i value=1><input type=text name=text><input type=submit value=Ok></form></center>"; // в этой переменной будет лежать стандартное содержимое админ-панели
session_start();
$login = "login"; // логин администратора(dj)
$pass = "password"; // пароль администратора(dj)
if($_GET['p'] == "ajax"){ // если нам нужно ответить на запрос слушателя
Header("Cache-Control: no-cache, must-revalidate");
Header("Pragma: no-cache");
Header("Content-Type: text/javascript; charset=windows-1251"); // говорим, что будем загружать javascript
$file = file("radio_id.txt"); // выбираем файл с id нашей последней песни(в смысле последней песни на радио, а не у пользователя)
$id = $file[0]; // обзываем это число id
if($id > $_GET['last']){ // если песня, которая играется у пользователя уже устарела
$text_file = file("radio_command.txt"); // открываем файл с командой
$count = count($text_file); // обрабатываем этот файл
$last = $id;
echo "var main = $('#main'); \n";
for($i = 0; $i < 1; $i++){
$s = $text_file[$i];
while(strpos($s, chr(92)) !== false){
$s = str_replace(chr(92), "", $s);
}
echo $s; // выводим файл
}
echo "\n";
echo "last_message_id = $id;"; // выводим новый id
}
}elseif(((isset($_GET['p']) && $_GET['p'] == "new") || (isset($_POST['p']))) && isset($_SESSION['pass'])){ // если-же мы хотим обновить команду(аудио-трек)
$file = file("radio_id.txt");
$id = $file[0];
$fh = fopen("radio_command.txt", "w+");
$get_text = $_POST['text'];
$gt = $get_text;
if(isset($_POST['l'])){
$get_text = "main.html('<center><h1>$gt</h1></center>');";
}elseif(isset($_POST['i'])){ // если мы добавляем музыку
$get_text = "main.html('<iframe src=listen.php?name=$gt frameborder=0></iframe>');"; // выводим в iframe содержимое listen.php?name=<имя нового музыкального файла>
}
while(strpos($get_text, "\r\n") !== false){
$get_text = str_replace("\r\n", "</br>", $get_text); // убираем все переводы строк
}
fwrite($fh, $get_text); // записываем файлы
fclose($fh);
$fhn = fopen("monitor_id.txt", "w+");
fwrite($fhn, $id + 1);
fclose($fhn);
echo $main_text; // выводим админ-панель
}elseif(($_GET['p'] == "admin") || ($_POST['p'] == "admin")){ // если мы хотим стать админом(войти)
if(!isset($_SESSION['pass'])){ // если мы уже не вошли
if(!isset($_POST['password'])){ // если мы не пытались ничего вводить
echo "<form action=index.php method=POST><input type=hidden name=p value=admin>Login: <input type=text name=login></br> Password: <input type=password name=password></br><input type=submit value=Ok></form>";
}else{
if($_POST['login'] == $login && $_POST['password'] == $pass){ // проверяем логин-пароль
$_SESSION['pass'] = $pass; // если они верные, то входим
echo $main_text; // выводим админ-панель
}else{
echo "Password incorrect";
}
}
}else{
echo $main_text; // если мы уже вошли, то выводим админ-панель
}
}elseif(!isset($_GET['p']) || !isset($_POST['p'])){
include("listenme.php"); // если мы не ввели никаких параметров, значит хотим просто послушать музыку
}
?>
Спасибо за внимание!
Вот таким образом можно создать простое интернет-радио…
Плеер я использовал этот: habrahabr.ru/blogs/web_design/10864 чтобы не усложнять загрузку.