Telnet Ausgabe anpassen

Radanua

Mitglied
Hallihallo liebe Leutchen,
ich melde mich mal wieder aus dem Ruhrpott mit einer neuen Frage.. ;)!..
Ich habe derzeit vor meine Teamspeak 3 Server per PHP zu Erstellen.
Alles funktioniert soweit ohne Probleme, jedoch würde ich gerne die Ausgabe anpassen, die nach Erstellung des Servers vom Telnet Server übergeben wird.

Beispiel Ausgabe:
sid=2 token=JWzbg0XauLeIweBH3JAg+pa8B92lR8jXgUvTJvnS virtualserver_port=9988

Jetzt möchte ich jedoch 3 Variable daraus entstehen lassen..
Erste Variable soll der Wert nach SID= sein (2)
Zweite Variable der Wert nach token= (JWzbg0XauLeIweBH3JAg+pa8B92lR8jXgUvTJvnS)
Dritte Variable der Wert nach virtualserver_port0 (9988)

Wie kann ich sowas realisieren? Habe mit explode etc. etwas experimentiert aber wirklich funktioniert hat da gar nichts.

Hoffe auf eure Hilfe :)
 
Grüße,

ich hab da mal was vorbereitet :D.
Code-Kritik bezüglich der Übersicht oder anderen Dingen ist gerne erwünscht.
Hier also der Code (ein bisschen wirr aber er funktioniert - getestet):

PHP:
<?php
$Zeichenkette = "sid=2 token=JWzbg0XauLeIweBH3JAg+pa8B92lR8jXgUvTJvnS virtualserver_port=9988";

//Zeichenkette zerlegen -> nach sid=, token=, virtualserver_port=
// --> deren stellen im String rausfinden

////////////////1.Variable
//---> "="
$V_eins = strpos($Zeichenkette, "=");
//-> wann kommt token -> dazwischenliegende Werte = Variable 1
$tok = strpos($Zeichenkette, "token");
	//-> Variable_1 festlegen
	$Länge = $tok - $V_eins-1;
	$Variable_1 = substr($Zeichenkette, $V_eins+1, $Länge);
	
////////////////2.Variable
//wann kommt das 2. Mal "=" vor
//-> wir wissen,dass das erste immer an 4. Stelle vorkommt
$V_zwei = strpos($Zeichenkette, "=", 4);
//wann kommt das Leerzeichen vor virtualserver_port
$Leerzeichen = strpos($Zeichenkette, " ", $V_zwei);
//Zeichen zwischen dem 2. "=" und dem Leerzeichen-1 ist die 2. Variable
$Länge = $Leerzeichen - $V_zwei - 1;
$Variable_2 = substr($Zeichenkette, $V_zwei+1, $Länge);
	
////////////////3.Variable
//virtualserver_port= hat 19 Zeichen -> Leerzeichen+20 plus Länge von 4 für substr ergibt die 3. Variable
$Variable_3 = substr($Zeichenkette, $Leerzeichen+20, 4);


echo"Ausgabe::<br><br>V1=$Variable_1<br>V2=$Variable_2<br>V3=$Variable_3";
?>

hab mir dazu mal deine angegebene Zeichenkette geschnappt ^^.

P.S. bastle derzeit noch an einer eleganteren Lösung -> Priorität hatte erstmal die Funktionalität ;-)
 
Elegantere Lösung:
PHP:
$str = 'sid=2 token=JWzbg0XauLeIweBH3JAg+pa8B92lR8jXgUvTJvnS virtualserver_port=9988';
$pattern = '/sid=(?<sid>\d+) token=(?<token>.+) virtualserver_port=(?<port>\d+)/';
preg_match($pattern, $str, $match);
echo $match['sid'].' - '.$match['token'].' - '.$match['port'];
 
:eek: durchaus die wesentlich elegantere Lösung.

@timestamp: wäre es möglich mir die 2. Zeile deines Codes ein wenig zu erklären?
Danke und Gruß
 
Stichwort reguläre Ausdrücke (google findet).
\d+ steht für eine beliebige Anzahl Zahlen, mindestens eine.
.+ steht für eine beliebige Anzahl jeglicher Zeichen, mindestens eins
(...) gruppiert ein Ergebnis
(?<index>) gibt einen assoziativen array eintrag.
 
Zurück