首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过在PHP 5.4和IIS 8上运行脚本来实现未定义的变量

通过在PHP 5.4和IIS 8上运行脚本来实现未定义的变量
EN

Stack Overflow用户
提问于 2013-09-10 23:03:55
回答 1查看 334关注 0票数 0

我有一个关于在windows ( IIS 8+PHP5.4)上运行脚本的小问题,我试着让下面的脚本工作。

代码语言:javascript
复制
<?php

class RadInfo {

    private $db;
    private $cfg;
    private $dnas_data;

    function __construct() {
        $this->db = Com_DB::getInstance();
        $this->cfg = new Config();
    }

    function openstats() {

        $ch = curl_init($this->cfg->shoutcasthost . '/admin.cgi?sid=' . $this->cfg->shoutcastsid . '&mode=viewxml');

        curl_setopt($ch, CURLOPT_PORT, $this->cfg->shoutcastport);
        curl_setopt($ch, CURLOPT_USERAGENT, $this->cfg->shoutcastuagent);
        curl_setopt($ch, CURLOPT_TIMEOUT, 5);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
        curl_setopt($ch, CURLOPT_USERPWD, $this->cfg->shoutcastuser . ':' . $this->cfg->shoutcastpasswd);

        $curl = curl_exec($ch);
        curl_close($ch);

        if ($curl) {
            $xml = @simplexml_load_string($curl);
            $dnas_data = array (
                'CURRENTLISTENERS'    => $xml->CURRENTLISTENERS,
                'PEAKLISTENERS'        => $xml->PEAKLISTENERS,
                'MAXLISTENERS'        => $xml->MAXLISTENERS,
                'REPORTEDLISTENERS'    => $xml->REPORTEDLISTENERS,
                'AVERAGETIME'        => $xml->AVERAGETIME,
                'SERVERGENRE'        => $xml->SERVERGENRE,
                'SERVERURL'            => $xml->SERVERURL,
                'SERVERTITLE'        => $xml->SERVERTITLE,
                'SONGTITLE'            => $xml->SONGTITLE,
                'NEXTTITLE'            => $xml->NEXTTITLE,
                'SONGURL'            => $xml->SONGURL,
                'IRC'                => $xml->IRC,
                'ICQ'                => $xml->ICQ,
                'AIM'                => $xml->AIM,
                'STREAMHITS'        => $xml->STREAMHITS,
                'STREAMSTATUS'        => $xml->STREAMSTATUS,
                'BITRATE'            => $xml->BITRATE,
                'CONTENT'            => $xml->CONTENT,
                'VERSION'            => $xml->VERSION,
            );

            if ($dnas_data['STREAMSTATUS'] == 1)
            {
                foreach ($xml->LISTENERS->LISTENER as $listener)
                {
                    $sc_data['LISTENERS'][] = array(
                        'HOSTNAME' =>  $listener->HOSTNAME,
                        'USERAGENT' =>  $listener->USERAGENT,
                        'CONNECTTIME' =>  $listener->CONNECTTIME,
                        'POINTER' =>  $listener->POINTER,
                        'UID' =>  $listener->UID,
                    );
                }

                foreach ($xml->SONGHISTORY->SONG as $song)
                {
                    $sc_data['SONGHISTORY'][] = array(
                        'PLAYEDAT' =>  $song->PLAYEDAT,
                        'TITLE' =>  $song->TITLE,
                    );
                }
            }
        } else {
            $dnas_data = array('ERROR' => 'Could not connect to dnas-server!');
        }


    }


    function LoadServerTitle() {
            return $this->dnas_data['STREAMTITLE'];
    }


}

?>

我已经对脚本进行了更改,但是输出仍然是空的。

我试着调用类/函数the:

代码语言:javascript
复制
$comcms->slim->get('/streamtitle', function() use($comcms) {
        $comcms->jsonOutput($comcms->radinfo->LoadServerTitle());
}); 

代码语言:javascript
复制
$comcms->slim->get('/streamtitle', function() use($comcms) {
    if ($comcms->radinfo->openstats()) {
        $comcms->jsonOutput($comcms->radinfo->LoadServerTitle());
    }
});

我已经尝试了几个选项,但都没有效果。我在使用cURL时遇到了最初的问题,但问题已经解决了,因为PHP无法加载模块。

现在我在获取任何信息时遇到了问题。LoadServerTitle给出了一个空的输出,但是我不能让它正常工作。$this->cfg部分来自数据库。

有人能给我一个让这个脚本工作的想法吗?我想要感谢到目前为止帮助我的人。

EN

回答 1

Stack Overflow用户

发布于 2013-09-10 23:06:59

您在一个方法中声明了$dnas_data,因此它在该方法之外是不可访问的。

我建议您声明另一个成员变量来存储数据:

代码语言:javascript
复制
class RadInfo {

    private $db;
    private $cfg;

    private $dnas_data;

并将所有出现的$dnas_data替换为$this->dnas_data

我刚刚又看了一遍你的GetServerTitle()方法:

代码语言:javascript
复制
return($this->openstats($dnas_data['SERVERTITLE']));

您真的要再次调用openstats()吗?将其更改为:

代码语言:javascript
复制
return $this->dnas_data['SERVERTITLE'];
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18722450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档