PHP Undefined offset: 1
Hier ist mein PHP-Skript:
<?php
$address = htmlentities(strtolower(Config::get('aac.ip')));
$port = Config::get('aac.port');
@$sock = fsockopen ($address, $port, $errno, $errstr, 1);
if(!$sock) echo '<small class="muted"><strong>Server status:</strong></small> <span class="label label-important">OFFLINE</span><br />'; else {
$info = chr(6).chr(0).chr(255).chr(255).'info';
fwrite($sock, $info);
$data='';
while (!feof($sock))$data .= fgets($sock, 1024);
fclose($sock);
//if needed
//var_dump($data);
preg_match('/players online="(\d+)" max="(\d+)"/', $data, $matches);
$players = ''.$matches[1].' /'.$matches[2];
preg_match('/uptime="(\d+)"/', $data, $matches);
$h = floor($matches[1] / 3600);
$m = floor(($matches[1] - $h*3600) / 60);
$uptime = ''.$h.'h '.$m.'m';
preg_match('/monsters total="(\d+)"/', $data, $matches);
$monsters = ''.$matches[1];
preg_match('#<motd>(.*?)</motd>#s', $data, $matches);
$motd = ''.$matches[1];
preg_match('/npcs total="(\d+)"/', $data, $matches);
$npcs = ''.$matches[1];
if(empty($players) or $players == " /") $players = "??? /???";
if(empty($uptime)) $uptime = "???";
if(empty($monsters)) $monsters = "???";
if(empty($motd)) $motd = "???";
echo "
<small class='muted'><strong>Server status:</strong></small> <span class='label label-success'>ONLINE</span><br />
<small class='muted'><strong>Players:</strong> $players</small><br />
<small class='muted'><strong>Uptime:</strong> $uptime</small><br />
<small class='muted'><strong>Monsters:</strong> $monsters</small><br />
<small class='muted'><strong>MOTD:</strong> $motd</small><br />
$npcs
";
}
?>
Den $npcs
variable gibt einen Fehler zurück Undefined offset: 1
. Ich habe versucht, es zu lösen, viele Möglichkeiten, aber keiner von Ihnen arbeitete. Auch hier ist der var_dump Daten:
string '<?xml version="1.0"?>
<tsqp version="1.0"><serverinfo uptime="33360" ip="127.0.0.1" servername="Forgotten" port="7171" location="Europe" url="http://otland.net/" server="The Forgotten Server" version="0.2.15" client="9.86"/><owner name="" email="@otland.net"/><players online="2" max="1000" peak="2"/><monsters total="636"/><map name="forgotten" author="Komic" width="1000" height="1000"/><motd>Welcome to the Forgotten Server!</motd></tsqp>
' (length=442)
Ich versuche zum abrufen der info. Auch bin ich in der Lage, zum abrufen der servername, Lage, und Dinge wie, dass? Ich bin nicht sehr erfahren viel. 😛
$npcs = ''.$matches[1];
wenn diese Zeile den Fehler zurückzugeben, es bedeutet, dass die oben preg_match()
ist wahrscheinlich nicht finden, keine SpieleEs gibt keine "npcs" information in
$data
so $matches
im Einklang mit $npcs
leer ist.Statt testen $Spieler/$Monster/etc. es ist besser, testen Sie Ihre preg_match. Beispiel:
if (preg_match(........)) { /*do something*/} else { /* do something else */}
danke, genau erkannt. wie könnte ich wieder an die anderen Daten?
InformationsquelleAutor erm_durr | 2013-08-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen " undefined offset-Fehler in PHP passiert, wenn Sie versuchen, Zugriff auf ein array-Element über einen index, der nicht existiert, zum Beispiel, sagen wir, ich habe die folgenden:
Im obigen Beispiel enthält das array drei Elemente. Die Indizes auf die Positionen 0, 1 und 2. Es gibt kein Element mit index 3. Daher der Fehler, wenn ich versuche, Zugriff auf $Obst[3].
In Ihrem speziellen Fall gibt es kein $matches[1]. Sollten Sie die Problembehandlung für die preg_match() aufrufen und sehen, ob dein Muster ist wieder in irgendwelche Spiele.
Als allgemeiner Ratschlag, ich schlage vor, Sie prüfen, die für die Existenz eines array-Schlüssel, bevor Sie versuchen, darauf zuzugreifen.
InformationsquelleAutor Neil Girardi