基本上,只是一个简单的脚本,可以检查shoutcast无线电是否在线,并输出基于它的代码。
我尝试使用file_get_contents和eregi执行此操作,但它似乎无法正常工作,或者可能会慢下来。
干杯。
:)
答案 0 :(得分:3)
如果您只想确定服务器正在运行,Sorki的答案很好,但正如Gumbo指出的那样,“在线”有不同级别。
例如,可能会禁用服务器,因此它不接受流连接。服务器可能正在接受流连接,但源可能已断开连接。
为此,您需要检查/7.html中的状态。用某个用户代理字符串中的“Mozilla”命中这个。你会得到这样的东西:
2,1,22,625,2,128,How Far To Austin - Don't Get Me Wrong
数据字段为:
listeners, status, peak listeners, maximum listeners, unique listeners, bitrate, track meta
易于解析...只需对其进行爆炸()。
答案 1 :(得分:1)
使用fsockopen并检查错误。
$fp = fsockopen("www.example.com", 8000, $errno, $errstr, 1); //last param is timeout in seconds
if (!$fp) {
echo "$errstr ($errno)<br />\n"; // radio offline
} else {
fclose($fp); // radio OK
}
你必须尝试确定timeout
,但最好在cron的背景上定期运行更大的超时并在某处保存结果。
答案 2 :(得分:0)
如果是你的收音机(你知道密码和用户名),你可以使用CURL。尝试从该段代码中获取$ xml-&gt; STREAMSTATUS值:
<?php
$useragent = "Mozilla (DNAS 2 Statuscheck)";
$sc_host = '192.168.0.1';
$sc_port = '8000';
$sc_user = 'admin';
$sc_pass = 'XXXXX';
$sc_sid = '1';
$ch = curl_init($sc_host . '/admin.cgi?mode=viewxml&sid=$sc_sid');
curl_setopt($ch, CURLOPT_PORT, $sc_port);
curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, $sc_user . ':' . $sc_pass);
$curl = curl_exec($ch);
if ($curl)
{
$xml = simplexml_load_string($curl);
// THIS IS THE ANSWER FOR YOUR QUESTION:
var_dump($xml->STREAMSTATUS);
// if retuns 1 - radio is online
// if retuns 0 - radio is offline
}
else
{
die('Could not connect to dnas-server!');
}
?>
享受