Search
Write a publication
Pull to refresh

Создание ajax-радио с помощью php

Здравствуйте, сегодня я расскажу вам, как с помощью чистого php можно создать своё радио.

Теория

Схема будет следующая: администратор(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 чтобы не усложнять загрузку.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.