1

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

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

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

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

Вот как нормально выглядит :
http://img294.imageshack.us/img294/5688/54453096.png
А когда сервер выключен вот такая жесть :
http://img257.imageshack.us/img257/6050/99078432.png

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

Вот скрипт на статус песни :

<?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 http://www.gmtt.co.uk
// 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 (02-11-2010 00:28:24)

2

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

error_reporting(0);

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

3

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

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

4

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

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

5

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

пишет tarasian666:

error_reporting(0);

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

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


пишет tarasian666:

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

+1

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

Отредактировано metra52 (02-11-2010 00:36:42)

6

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

пишет metra52:

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

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

http://radioheart.ru/banners/radioheart_400x40_banner.jpg
RadioHeart.ru: Функциональный радио хостинг с автодиджеем и нонстопом, а так же быстрый виртуальный хостинг. Возможность создать радио за 5 минут, подключить автодиджей и нонстоп.
Отзывы о хостинге

7

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

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

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

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

Отредактировано IntelXeon (02-11-2010 03:09:52)

8

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

пишет IntelXeon:

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

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

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

пишет Falcon:

пишет metra52:

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

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

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

9

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

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

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

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

Отредактировано IntelXeon (02-11-2010 03:11:43)

10

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

пишет IntelXeon:

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

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

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

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

11

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

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

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

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

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

Отредактировано IntelXeon (02-11-2010 03:22:20)

12

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

если Array значит забыл указать значение массива.

13

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

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

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

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

14

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

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

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

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

15

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

пишет IntelXeon:

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

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

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

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

http://radioheart.ru/banners/radioheart_400x40_banner.jpg
RadioHeart.ru: Функциональный радио хостинг с автодиджеем и нонстопом, а так же быстрый виртуальный хостинг. Возможность создать радио за 5 минут, подключить автодиджей и нонстоп.
Отзывы о хостинге