2013-06-05 93 views
0

我的错误是:未定义的变量和偏移

注意:未定义的变量:回报在C:\ XAMPP \ htdocs中\ server4.php第21行

和线21:

$return .= fgets($this->_socket); 

注意:未定义偏移量:0在C:\ XAMPP \ htdocs中\ server4.php上线95

注意:未定义偏移量:0在C:\ XAMPP \ htdocs中\ server4.php上线95

和线95:

$serverInfo = $master->server_getInfo($serverList[0]['ip'], $serverList[0]['port']); 

和我的全码:

<?php 
class Q3Master 
{ 
    private $_socket; 
    private $_port = '20810'; 
    private $_host; 

    public function __construct($masterHost) 
    { 
      $this->_socket = fsockopen('udp://79.175.173.73',20810); 
      stream_set_blocking($this->_socket,0); 
    } 

    public function master_listServers($timeout = '1') 
    { 
      fputs($this->_socket,str_repeat(chr(255),4).'getservers 69 empty full demo'."\n"); 

      $time=time()+$timeout; 
      while($time > time() || strpos($return,'EOT') === FALSE) 
      { 
        $return .= fgets($this->_socket); 
      } 
      $return = explode('\\',$return); 
      unset($return[0]); 
      unset($return[count($return)]); 
      $iplist = array(); 
      foreach($return as $server) 
      { 
        for($i = 0;$i < 4;$i++) 
          $addr[] = ord($server[$i]); 

        for($i = 4;$i < 6;$i++) 
          $port .= dechex(ord($server[$i])); 
        $port = hexdec($port); 
        $iplist[] = array('ip' => join('.',$addr),'port' => $port); 
        unset($addr); 
        unset($port); 
      } 

      return $iplist; 
    } 

    function server_getInfo($adresse, $port) 
    { 
      if($port != 0) 
      { 
        $cmd = "\xFF\xFF\xFF\xFFgetstatus"; 
        $f = fsockopen('udp://'.$adresse, $port); 

        socket_set_timeout ($f, 1); 
        fwrite ($f, $cmd); 
        $data = fread ($f, 10000); 
        fclose ($f); 

    if($data) 
    { 
     $temp = explode("\x0a",$data); 

     $list3 = explode("\\",substr($temp[1],1,strlen($temp[1]))); 
     for ($i = 0;$i <= count($list3);$i = $i + 2) { 
      $list[@$list3[$i]] = @$list3[$i + 1]; 
     } 
     array_pop($list); 

     $players = array(); 
     foreach($temp as $id => $player) 
     { 
      if($id != 0 AND $id != 1) 
      { 
       $infos = explode(' ', $player, 3); 
       $name = explode('"', $infos[2]); 
       $players[] = array('score' => $infos[0], 'ping' => $infos[1], 'name' => $name[1]); 
      } 
     } 
     array_pop($players); 

     $infos = array(); 
     $infos = $list; 
     $infos['players'] = $players; 

     return $infos; 
    } 
    else 
     return FALSE; 
      } 
      else 
        return FALSE; 
    } 
} 
$master = new Q3Master('79.175.173.73'); 

$serverList = $master->master_listServers(); 


$serverInfo = $master->server_getInfo($serverList[0]['ip'], $serverList[0]['port']); 

?> 

回答

0

添加使用var回报的initaliaze:

$return = ''; 

试试这个:

public function master_listServers($timeout = '1') 
    { 
      $return = ''; 
      fputs($this->_socket,str_repeat(chr(255),4).'getservers 69 empty full demo'."\n"); 

      $time=time()+$timeout; 
      while($time > time() || strpos($return,'EOT') === FALSE) 
      { 
        $return .= fgets($this->_socket); 
      } 
      $return = explode('\\',$return); 
      unset($return[0]); 
      unset($return[count($return)]); 
      $iplist = array(); 
      foreach($return as $server) 
      { 
        for($i = 0;$i < 4;$i++) 
          $addr[] = ord($server[$i]); 

        for($i = 4;$i < 6;$i++) 
          $port .= dechex(ord($server[$i])); 
        $port = hexdec($port); 
        $iplist[] = array('ip' => join('.',$addr),'port' => $port); 
        unset($addr); 
        unset($port); 
      } 

      return $iplist; 
    } 
0

在使用它之前,您需要定义$return,因为如果while循环不会被执行,$return未定义,因此不能用作参数explode()

$return = ''; // <-- define it as an empty string 

while($time > time() || strpos($return,'EOT') === FALSE) 
{ 
     $return .= fgets($this->_socket); 
} 
$return = explode('\\',$return); 
0

说明:未定义变量:返回在​​C:\ XAMPP \ htdocs中\ server4.php第21行

然后定义该变量:$return = null

注意:未定义偏移量:0在C:\ XAMPP \ htdocs中\ server4.php上线95

然后要么限定偏移量:$serverList[0] = array('ip' => null, 'port' => null),或检查是否偏移被定义在使用它之前:

if (isset($serverList[0])) { 
    $serverInfo = $master->server_getInfo($serverList[0]['ip'], 
             $serverList[0]['port']); 
} 

但首先你要调查为什么你在哪里期待$return$serverList[0]被定义。也许这些变量应该由代码的不同部分提供,这是破坏的。

+0

感谢但知道有这个问题:警告:缺少Q3Master :: server_getInfo()的参数2,在第97行的C:\ xampp \ htdocs \ server4.php中调用并在C:\ xampp \ htdocs \ server4中定义.php on line 44 注意:未定义的变量:第46行中的C:\ xampp \ htdocs \ server4.php中的端口 –

+0

“Q3Master :: server_getInfo()缺少参数2”的哪一部分不明白?至于未定义的'$ port'变量:reson与'$ return'相同。 – Oswald