header('Location: ********** true, 307);
<?php /* каждому серверу в вебрут добавляем файл listeners.xsl, вот такой: <xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" > <xsl:output omit-xml-declaration="yes" method="text" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" indent="no" encoding="UTF-8" /><xsl:strip-space elements="*"/> <xsl:template match = "/icestats" > <xsl:for-each select="source"> <xsl:value-of select="listeners" /> </xsl:for-each> </xsl:template> </xsl:stylesheet> к скрипту обращаемся вот так: script.php?mount=stream.mp3 можно имитировать обращение как к icecast, вот пример для nginx (часть секции) listen 8001; root /var/www/html/; index script.php; rewrite ^/(.*)$ /script.php?mount=$1 last; */ $server1 = 'http://<первый сервер>:8000/'; $server2 = 'http://<второй сервер>:8000/'; if (isset($_REQUEST['mount'])) { $listeners1 = $listeners2 = false; set_error_handler(function($severity, $message, $file, $line) { throw new ErrorException($message, $severity, $severity, $file, $line); }); try { $listeners1 = (int) file_get_contents($server1 . '/listeners.xsl?mount=/' . $_REQUEST['mount']); } catch (Exception $e) { } try { $listeners2 = (int) file_get_contents($server2 . '/listeners.xsl?mount=/' . $_REQUEST['mount']); } catch (Exception $e) { } restore_error_handler(); if (!$listeners2 && !$listeners1) { header('Refresh:0'); // оба сервера недоступны тут я не доктор, например пробуем снова } elseif (!$listeners1 && $listeners2) { header('Location: ' . $server2 . $_REQUEST['mount'], true, 307); // недоступен первый, отправляем слушателя на второй } elseif (!$listeners2 && $listeners1) { header('Location: ' . $server1 . $_REQUEST['mount'], true, 307); // недоступен второй, отправляем слушателя на первый } else { if ($listeners1 > $listeners2) { // доступны оба сервера, отправляем туда, где меньше слушателей, если одинаково на первый header('Location: ' . $server2 . $_REQUEST['mount'], true, 307); } else { header('Location: ' . $server1 . $_REQUEST['mount'], true, 307); } } } ?>
<intro>/intro.ogg</intro>