2013-08-02 35 views
0

我正在尝试使用脚本来查询Shoutcast服务器是否联机或脱机。下面的代码是我目前使用的。查询Shoutcast服务器是否离线或与PHP在线

$vt_ip = "ip"; 
$vt_port = "port"; 

$output = @fsockopen($vt_ip, $vt_port, $errno, $errstr, 2); 

if (!$output) { 
echo "<FONT CLASS=f1 COLOR=#DD0000><B>OFFLINE</B></FONT>"; 
} else { 
echo "<FONT CLASS=f1 COLOR=#00DD00><B>ONLINE</B></FONT>"; 
} 

@fclose($output); 

但它不更新,它卡在离线状态。

任何帮助将不胜感激。

+2

您应该考虑正确处理'fsockopen'只需在其中放置一个'@'来抑制错误不会奇迹般地让您的代码在发生错误时工作。 – Halcyon

回答

0
$vt_ip = "ip"; 
$vt_port = "port"; 

$conn = fsockopen($vt_ip, $vt_port, $errno, $errstr, 2); 

if(!$conn){ 
    echo $errno; 
}else{ 

fwrite($conn, "\n"); 
$output = fread($conn, 1024); 
fclose($conn); 

if ($output == "") { 
    echo "<FONT CLASS=f1 COLOR=#DD0000><B>OFFLINE</B></FONT>"; 
} else { 
     echo "<FONT CLASS=f1 COLOR=#00DD00><B>ONLINE</B></FONT>"; 
    } 
} 
+0

这对我来说不起作用,至于fwrite,$ output和fclose,行都给我这个错误“提供的参数不是一个有效的流资源” –

+0

然后它很可能没有正确连接,我编辑了代码以显示错误(如果有的话)。 –

+0

它现在错误,它在第3行“连接超时” –

0

简单地与SHOUTcast服务器建立TCP连接以确定流是否正常工作是不够的。实际上,运行的SHOUTcast服务器将始终接受您的TCP连接,即使没有用于播放的流。

您必须连接,请求流,然后检查返回状态代码。一旦连接,发送此数据:

GET /; HTTP/1.0 

后面跟着一个\r\n\r\n。现在,从流中读取数据,直到获得\r\n\r\n。然后,您可以断开连接。检查第一个响应行的状态代码,看它是否为200。如果是,你有一个活跃的流。