基本上,只是一个简单的脚本,可以检查广播电台是否在线,并根据它输出代码。
我试图用 file_get_contents 和 eregi 来做这件事,但它似乎没有用,或者是 waaaaaay 变慢了。
干杯。
:)
如果您只是想确定服务器是否正在运行,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
易于解析...只需对其进行 explode() 即可。
使用 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 在后台定期运行更大的超时并将结果保存在某处。
如果是你的收音机(你知道密码和用户名),你可以使用 CURL。尝试从那段代码中获取 $xml->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!');
}
?>
请享用