我正在尝试为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;
}
任何想法???
谢谢!
答案 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;