Php 未定义的变量和偏移量
我的错误是: 注意:未定义的变量:在第21行的C:\xampp\htdocs\server4.php中返回 第21行是:Php 未定义的变量和偏移量,php,Php,我的错误是: 注意:未定义的变量:在第21行的C:\xampp\htdocs\server4.php中返回 第21行是: $return .= fgets($this->_socket); 注意:第95行C:\xampp\htdocs\server4.php中未定义的偏移量:0 注意:第95行C:\xampp\htdocs\server4.php中未定义的偏移量:0 第95行是: $serverInfo = $master->server_getInfo($serverLis
$return .= fgets($this->_socket);
注意:第95行C:\xampp\htdocs\server4.php中未定义的偏移量:0
注意:第95行C:\xampp\htdocs\server4.php中未定义的偏移量:0
第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']);
?>
添加变量返回的初始值,包括:
$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;
}
public function master\u 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->\u插座);
}
$return=爆炸(“\\”,$return);
未设置($return[0]);
未设置($return[计数($return)]);
$iplist=array();
foreach($作为$server返回)
{
对于($i=0;$i<4;$i++)
$addr[]=ord($server[$i]);
对于($i=4;$i<6;$i++)
$port.=dechex(ord($server[$i]);
$port=hexdec($port);
$iplist[]=array('ip'=>join('.',$addr),'port'=>$port);
未结算($addr);
unset(港口);
}
返回$iplist;
}
您需要在使用它之前定义$return
,因为如果while
循环将不被执行$return
未定义,因此不能用作explode()
的参数
$return='';//time()| | strpos($return,'EOT')==FALSE)
{
$return.=fgets($this->\u插座);
}
$return=爆炸(“\\”,$return);
注意:未定义的变量:在第21行的C:\xampp\htdocs\server4.php中返回
然后定义该变量:$return=null
注意:第95行C:\xampp\htdocs\server4.php中未定义的偏移量:0
然后定义该偏移量:$serverList[0]=array('ip'=>null,'port'=>null)
,或者在使用它之前检查偏移量是否已定义:
if (isset($serverList[0])) {
$serverInfo = $master->server_getInfo($serverList[0]['ip'],
$serverList[0]['port']);
}
但首先,您应该调查为什么需要定义$return
和$serverList[0]
。可能这些变量应该由代码的另一部分提供,该部分已损坏。谢谢,但我们知道存在以下问题:警告:Q3Master::server_getInfo()缺少参数2,在第97行的C:\xampp\htdocs\server4.php中调用,在第44行的C:\xampp\htdocs\server4.php中定义注意:未定义变量:第46行的C:\xampp\htdocs\server4.php中的端口
您不明白“Q3Master::server_getInfo()缺少参数2”的哪一部分吗?对于未定义的$port
变量:原因与$return
相同。
if (isset($serverList[0])) {
$serverInfo = $master->server_getInfo($serverList[0]['ip'],
$serverList[0]['port']);
}