【问题标题】:Simple check (PHP) to see if Shoutcast radio is online?简单检查(PHP)以查看 Shoutcast 广播是否在线?
【发布时间】:2010-12-03 14:11:42
【问题描述】:

基本上,只是一个简单的脚本,可以检查广播电台是否在线,并根据它输出代码。

我尝试使用 file_get_contents 和 eregi 来执行此操作,但它似乎不起作用,或者速度太慢了。

干杯。

:)

【问题讨论】:

  • 开始逐步停止使用eregiphp.net/eregi
  • 还有什么表明外壳在线?

标签: php radio status shoutcast


【解决方案1】:

如果你只是想确定服务器是否正在运行,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()。

【讨论】:

    【解决方案2】:

    使用 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 在后台定期以更大的超时时间运行它并将结果保存在某处。

    【讨论】:

      【解决方案3】:

      如果是您的收音机(您知道密码和用户名),您可以使用 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!');
      }
      ?> 
      

      享受

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-26
        • 1970-01-01
        • 2018-12-24
        • 1970-01-01
        • 1970-01-01
        • 2022-06-16
        • 2020-09-19
        • 2023-04-03
        相关资源
        最近更新 更多