缓存问题?

时间:2014-05-31 20:07:43

标签: php caching

我正在尝试为Teamspeak 3(一个VoIP程序)安装一个webviewer,但我确实遇到了一些问题。首先,官方网站已于1个月前停止支持,所以我不能不幸地问他们。

当我第一次访问webviewer页面时,一切似乎都运行得很好。但是,如果我刷新页面,它会变白并加载,直到我得到:

PHP Fatal error:  Maximum execution time of 30 seconds exceeded in C:\Users\[...]\TSQuery.class.php on line 414

这是该文件的第414行:

    $ret .= fgets($this->connection, 8096);

和整个功能:

private function send_raw($text)
{
    $i = -1;
    $ret = '';
    if ($this->connection === NULL)
    {
        $this->open_new_connection();
    }
    stream_set_timeout($this->connection, 0, 300000);
    fputs($this->connection, $text);

    do
    {
        $ret .= fgets($this->connection, 8096);
    }
    while (strstr($ret, "error id=") === false);

    return $ret;
}

我已经在我的webhost上尝试了这一点,并将脚本移动到安装了VoIP的同一台服务器上(认为主机可能会导致某些问题) - 但没有区别。

当我将脚本作为iframe放在我的webhost上并重新加载页面两次时,整个网站都会关闭!

Service Unavailable
The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.
Apache Server at www.site.com Port 80

但回到我自己的服务器,不时(1/10次加载)我得到:

PHP Notice:  Undefined property: TSQuery::$cachepath in C:\Users\[...]\TSQuery.class.php on line 85

这是第85行:

$this->cachepath .= $port . "/";

和整个功能:

public function use_by_port($port)
{
    if (is_numeric($port))
    {

        $resp = $this->send_cmd("use port=" . $port);
        if ($resp['error']['id'] === 0)
        {
            $this->cachepath .= $port . "/";
        }
        return $resp;
    }
    return false;
}

任何想法???

谢谢!

1 个答案:

答案 0 :(得分:1)

do
{
    $ret .= fgets($this->connection, 8096);
}
while (strstr($ret, "error id=") === false);

上面的代码表示: 连接WHILE没有找到“error_id =”的第一次出现(是假的)。 这意味着如果没有错误发生,它将连接到无限循环,我相信这就是你超时的原因。

<强>更新

我会跳过do / while并做这样的事情:

if(!$this->connection) return false;

$output = fgets($this->connection, 8096);
fputs($this->connection, $text);
fclose($this->connection);

if (substr($output, 0, 4) == '1 OK') return true;

return false;