MainRadiotalkCustom
Общие вопросы по интернет радио вещанию
6   •   Посмотреть все темы

Не приятная проблема со скриптом

 

29
IntelXeon @IntelXeon
Сделал человеку блог, радио сервер, сделал разметку, в общем все сделал на любительском уровне.

Но возникла проблема с скриптом вывода информации об статусе радио сервера.

Когда сервер работает все нормально выводит изображение Online, когда сервер работает но Winamp отключен, иконка Offline.
Но когда сервер вообще не работает (компьютер выключен) то весь блок вывода информации расползается и в общем жесть.

Вот как нормально выглядит :

А когда сервер выключен вот такая жесть :


Помогите пожалуйста.

Вот скрипт на статус песни :
<?PHP
$ip = "mikul.dyndns-free.com";
$port = "8000";


$fp = @fsockopen($ip,$port,$errno,$errstr,1);
if (!$fp)
{
$listeners = "0";
$error = "1";
}
else
{
fputs($fp, "GET /7.html HTTP/1.0\r\nUser-Agent: Mozilla\r\n\r\n");
while (!feof($fp))
{
$info = fgets($fp);
}
$info = str_replace('<HTML><meta http-equiv="Pragma" content="no-cache"></head><body>', "", $info);
$info = str_replace('</body></html>', "", $info);
$stats = explode(',', $info);
if (empty($stats[1]) )
{
$listeners = "0";
$error = "1";
}
else
{
if ($stats[1] == "1")
{
$listeners = $stats[0];
$bitrate = $stats[5];
$song = $stats[6];
$song = iconv('Windows-1251', 'UTF-8', $song);
}
else
{
$listeners = "0";
$error = "1";
}
}
}

echo $song;
?>

А вот скрипт на вывод онлаин-оффлаин :
<?php
// Shoutcast Server Stats
// Parses shoutcasts xml to make an effective stats thing for any website
// ©2004-2005 Daniel Brown **********
// Please refer to the readme file for use.


// Add-On MAXLISTNERS insead of the / 10 MAXLISTENERS which was set, and the BITRATE add-on.
// Online and Offline graphics, and add-on code.
// Better HTML Script.

// Do Not Try To Edit This Only Unless You Know What You're Doing!!!!!!!

include('config_radio.php');

$scfp = fsockopen("$scip", $scport, &$errno, &$errstr, 30);
if(!$scfp) {
$scsuccs=1;
echo''.$scdef.' is Offline';
}
if($scsuccs!=1){
fputs($scfp,"GET /admin.cgi?pass=$scpass&mode=viewxml HTTP/1.0\r\nUser-Agent: SHOUTcast Song Status (Mozilla Compatible)\r\n\r\n");
while(!feof($scfp)) {
$page .= fgets($scfp, 1000);
}
######################################################################################################################
/////////////////////////part 1 \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
//define xml elements
$loop = array("STREAMSTATUS", "BITRATE", "SERVERTITLE", "CURRENTLISTENERS", "MAXLISTENERS", "BITRATE");
$y=0;
while($loop[$y]!=''){
$pageed = ereg_replace(".*<$loop[$y]>", "", $page);
$scphp = strtolower($loop[$y]);
$$scphp = ereg_replace("</$loop[$y]>.*", "", $pageed);
if($loop[$y]==SERVERGENRE || $loop[$y]==SERVERTITLE || $loop[$y]==SONGTITLE || $loop[$y]==SERVERTITLE)
$$scphp = urldecode($$scphp);

// uncomment the next line to see all variables
//echo'$'.$scphp.' = '.$$scphp.'<br>';
$y++;
}
//end intro xml elements
######################################################################################################################
######################################################################################################################
/////////////////////////part 2\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
//get song info and history
$pageed = ereg_replace(".*<SONGHISTORY>", "", $page);
$pageed = ereg_replace("<SONGHISTORY>.*", "", $pageed);
$songatime = explode("<SONG>", $pageed);
$r=1;
while($songatime[$r]!=""){
$t=$r-1;
$playedat[$t] = ereg_replace(".*<PLAYEDAT>", "", $songatime[$r]);
$playedat[$t] = ereg_replace("</PLAYEDAT>.*", "", $playedat[$t]);
$song[$t] = ereg_replace(".*<TITLE>", "", $songatime[$r]);
$song[$t] = ereg_replace("</TITLE>.*", "", $song[$t]);
$song[$t] = urldecode($song[$t]);
$dj[$t] = ereg_replace(".*<SERVERTITLE>", "", $page);
$dj[$t] = ereg_replace("</SERVERTITLE>.*", "", $pageed);
$r++;
}
//end song info
fclose($scfp);
}

//display stats
if($streamstatus == "1"){
//you may edit the html below, make sure to keep variable intact
echo'
<img src="./wp-content/themes/mikul/online.jpg"><br>';
}
if($streamstatus == "0")
{
//you may edit the html below, make sure to keep variable intact
echo'
<img src="./wp-content/themes/mikul/offline.jpg">';
}
?>

Благодарю за внимание.

ps
А сложно реализовать динамическое обновление текущей песни ?

Отредактировано IntelXeon - 01.11.2010
6245
Тарас @tarasian666
error_reporting(0);

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

833
metra52 @metra52
Обновление песни можно организовать на jquery

6245
Тарас @tarasian666
или "дедовским" методом iframe

833
metra52 @metra52
tarasian666 пишет:

error_reporting(0);

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

Солидарен с тобой. на вывод одной песни достаточно было затратить кода раза в 2 меньше)


tarasian666 пишет:

или "дедовским" методом iframe

+1

Добавлено спустя 8 минут 33 секунды:
Кстати ребята попробуйте сделать при нажатии на кнопку проигрывание радио а не скачку плей листа

Отредактировано metra52 - 01.11.2010
888
Falcon @Falcon
metra52 пишет:

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

Знаю как, только вот маленькая трабла, нужен медиа-плагин(или еще какой-то, не помню точно что за он). Т.е. если он установлен, то все играет. если нет, то после нажатия кнопки ничего не происходит)

29
IntelXeon @IntelXeon
Спасибо за советы но я не знаю как писать скрипт маленький. Как выводить на прямую тоже не знаю (без флеша).

Благодарю за ответы ! И Помощь. Не знаю что бы без вас делал бы )

Только вот куда error_reporting(0); вбить не знаю. Вбил в конец не вышло. Попробую в начало.

Отредактировано IntelXeon - 02.11.2010
833
metra52 @metra52
IntelXeon пишет:

Спасибо за советы но я не знаю как писать скрипт маленький. Как выводить на прямую тоже не знаю (без флеша).

Благодарю за ответы ! И Помощь. Не знаю что бы без вас делал бы )

У тебя просто много лишних переменных. у тебя и битрейт и количество слушателей. зачем они сдесь если скрипт выводит один трек)

Falcon пишет:

metra52 пишет:

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

Знаю как, только вот маленькая трабла, нужен медиа-плагин(или еще какой-то, не помню точно что за он). Т.е. если он установлен, то все играет. если нет, то после нажатия кнопки ничего не происходит)

windows media player вот из него)

29
IntelXeon @IntelXeon
metra52, скрипт не мой. Скачал не помню где но на этом форуме. Часть удалил а часть нет.

Куда error_reporting(0); вставить что бы не коверкало сайт ?

Хм. Вставил в начало вроде бы ошибка пропала ! Благодарю вас !

Отредактировано IntelXeon - 02.11.2010
833
metra52 @metra52
IntelXeon пишет:

metra52, скрипт не мой. Скачал не помню где но на этом форуме. Часть удалил а часть нет.

Куда error_reporting(0); вставить что бы не коверкало сайт ?

Хм. Вставил в начало вроде бы ошибка пропала ! Благодарю вас !

в самое начало. после <?php

29
IntelXeon @IntelXeon
Вроде бы все нормально. Но скрипт не так как хотелось бы пашет. Когда OFFLINE по строке песни идет "Array" а когда сервер отключен полностью пишет "a is Offline" ну думаю это уже не проблема !

И так уже решил самые-самые проблемы которые не могу сам решить.

А почему долго так сайт загружается когда сервер отключен около минуты грузит ? Это выполняется запросы на сервер ?

ps
АФК на час-два, в WOW папу в данж веду :D Без приколов )

Отредактировано IntelXeon - 02.11.2010
833
metra52 @metra52
если Array значит забыл указать значение массива.

29
IntelXeon @IntelXeon
Хух ! Все сделал все работает как и хотел. Только осталось одно "НО" !

Когда сервер полностью отключен сайт загружается около минуты.
А если код блока поставить в низ то сначала загрузит сайт а потом тупит около минуты.

Так вот как бы сделать что бы сначала загружался полностью сайт а потом PHP получал сведения с сервера ?

6245
Тарас @tarasian666
если скрипт подгружать методом require то он будет подгружатся во время загрузки страницы, если include то сначала загрузится весь скрипт и уж тогда будет отображатся страница.

Тажке пробуйте уменьшить таймаут на подключение к сокету, ведь когда скрипту не удается подключится (когда серв выкл) он пытается подключится пока не пройдет таймаут

fsockopen("$scip", $scport, &$errno, &$errstr, 30);
30 - таймаут в секундах

888
Falcon @Falcon
IntelXeon пишет:

Хух ! Все сделал все работает как и хотел. Только осталось одно "НО" !

Когда сервер полностью отключен сайт загружается около минуты.
А если код блока поставить в низ то сначала загрузит сайт а потом тупит около минуты.

Так вот как бы сделать что бы сначала загружался полностью сайт а потом PHP получал сведения с сервера ?

И правильно, что долго грузится. Скрипт пытается получит данные из странцы, которая не существует. Он пытается к ней подключится и в итоге отваливается из-за тайм-аута. Как вариант уменьшить время выполнения скрипта. По моему, делается через set_time_limit