Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
tutorial:server:php_querry_script [2011/02/28 19:22] HSFighter [Vorwort] |
tutorial:server:php_querry_script [2012/11/02 02:31] (aktuell) HSFighter [Funktion für die Auswertung] |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== PHP Server-Query Script ====== | + | ====== PHP HL² Server-Query Script ====== |
Das hier ist ein Tutorial für ein PHP Server-Query Script | Das hier ist ein Tutorial für ein PHP Server-Query Script | ||
das Informationen von einem HL2/CS:S Server auslesen und anzeigen kann. | das Informationen von einem HL2/CS:S Server auslesen und anzeigen kann. | ||
Zeile 18: | Zeile 18: | ||
* Daten ins Array laden | * Daten ins Array laden | ||
- | **Um Player vom Server ab zu fragen (z.B. Playername, Frags usw.), muss man eine Art "Ticket" anfordern. | + | **Um Player vom Server ab zu fragen (z.B. Playername, Frags usw.), |
+ | muss man eine Art "Ticket" anfordern. | ||
Dieses Ticket ist # eine begrenzte Zeit gültig und ermöglicht es die Informationen zu bekommen.** | Dieses Ticket ist # eine begrenzte Zeit gültig und ermöglicht es die Informationen zu bekommen.** | ||
- | Verbindung zum Server herstellen | + | * Verbindung zum Server herstellen |
* Ein Ticket anfordern (//Challenge//) | * Ein Ticket anfordern (//Challenge//) | ||
* Einen Wert zum Server schicken mit angehängten Ticket (//das was wir vorher abgefragt haben//) | * Einen Wert zum Server schicken mit angehängten Ticket (//das was wir vorher abgefragt haben//) | ||
Zeile 48: | Zeile 49: | ||
var $cvarlist; | var $cvarlist; | ||
- | var $A2S_SERVERQUERY_GETCHALLENGE = "\x57"; // challenge | + | var $A2S_SERVERQUERY_GETCHALLENGE = "\x55\xFF\xFF\xFF\xFF"; // challenge |
var $A2S_INFO = "TSource Engine Query\x00"; // info | var $A2S_INFO = "TSource Engine Query\x00"; // info | ||
var $A2S_PLAYER = "\x55"; // player | var $A2S_PLAYER = "\x55"; // player | ||
Zeile 77: | Zeile 78: | ||
==== Funktion für die Auswertung ==== | ==== Funktion für die Auswertung ==== | ||
- | Jetzt brauchen wir Funktionen, die die Daten auswertet die uns der Server zurück schick.[/b] Man muss sich das folgendermaßen vorstellen:\\ | + | Jetzt brauchen wir Funktionen, die die Daten auswertet die uns der Server zurück schick. Man muss sich das folgendermaßen vorstellen:\\ |
Der Server schickt uns eine Kette mit Informationen, die alle hintereinander kommen. Die müssen wir an bestimmten stellen trennen, damit wir die Informationen unterteilen können.\\ | Der Server schickt uns eine Kette mit Informationen, die alle hintereinander kommen. Die müssen wir an bestimmten stellen trennen, damit wir die Informationen unterteilen können.\\ | ||
Zeile 96: | Zeile 97: | ||
function get_int16() { | function get_int16() { | ||
$unpacked = unpack('sint', fread($this->fp, 2)); | $unpacked = unpack('sint', fread($this->fp, 2)); | ||
- | return $unpacked[int]; | + | return $unpacked["int"]; |
} | } | ||
Zeile 102: | Zeile 103: | ||
function get_int32() { | function get_int32() { | ||
$unpacked = unpack('iint', fread($this->fp, 4)); | $unpacked = unpack('iint', fread($this->fp, 4)); | ||
- | return $unpacked[int]; | + | return $unpacked["int"]; |
} | } | ||
Zeile 108: | Zeile 109: | ||
function get_float32() { | function get_float32() { | ||
$unpacked = unpack('fint', fread($this->fp, 4)); | $unpacked = unpack('fint', fread($this->fp, 4)); | ||
- | return $unpacked[int]; | + | return $unpacked["int"]; |
} | } | ||
// einen String vom Server holen | // einen String vom Server holen | ||
function get_string() { | function get_string() { | ||
+ | $str = ''; | ||
while(($char = fread($this->fp, 1)) != chr(0)) { | while(($char = fread($this->fp, 1)) != chr(0)) { | ||
$str .= $char; | $str .= $char; | ||
Zeile 133: | Zeile 135: | ||
$this->get_byte(); | $this->get_byte(); | ||
$challenge = $this->get_4(); | $challenge = $this->get_4(); | ||
- | return $challenge; | ||
fclose($this->fp); | fclose($this->fp); | ||
+ | return $challenge; | ||
+ | |||
} </code> | } </code> | ||
Wir benutzen unsere Verbindungsfunktionen und übergeben den Wert "//**W**//" (//**\x57**//) den wir vorher bei der Deklaration in die Variable "//**A2S_SERVERQUERY_GETCHALLENGE**//" geschrieben haben.\\ | Wir benutzen unsere Verbindungsfunktionen und übergeben den Wert "//**W**//" (//**\x57**//) den wir vorher bei der Deklaration in die Variable "//**A2S_SERVERQUERY_GETCHALLENGE**//" geschrieben haben.\\ | ||
Zeile 215: | Zeile 218: | ||
===== Zusammenfassung der Klasse ===== | ===== Zusammenfassung der Klasse ===== | ||
<code=php><?php | <code=php><?php | ||
+ | /** | ||
+ | * ============================================================================= | ||
+ | * This class will get infos from a HL2 server over php | ||
+ | * | ||
+ | * @author HSFighter | ||
+ | * @special thx to Chrisber | ||
+ | * @version 1.1.0 | ||
+ | * @package PHP Server-Query Script | ||
+ | * @link http://sourceserver.info | ||
+ | * | ||
+ | * @version 1.1.0: serverstatus.class.php by hsfighter $ | ||
+ | * ============================================================================= | ||
+ | */ | ||
+ | |||
class HLServerAbfrage { | class HLServerAbfrage { | ||
Zeile 227: | Zeile 244: | ||
- | var $A2S_SERVERQUERY_GETCHALLENGE = "\x57"; // challenge | + | var $A2S_SERVERQUERY_GETCHALLENGE = "\x55\xFF\xFF\xFF\xFF"; // challenge |
var $A2S_INFO = "TSource Engine Query\x00"; // info | var $A2S_INFO = "TSource Engine Query\x00"; // info | ||
var $A2S_PLAYER = "\x55"; // player | var $A2S_PLAYER = "\x55"; // player | ||
Zeile 263: | Zeile 280: | ||
function get_int16() { | function get_int16() { | ||
$unpacked = unpack('sint', fread($this->fp, 2)); | $unpacked = unpack('sint', fread($this->fp, 2)); | ||
- | return $unpacked[int]; | + | return $unpacked["int"]; |
} | } | ||
Zeile 269: | Zeile 286: | ||
function get_int32() { | function get_int32() { | ||
$unpacked = unpack('iint', fread($this->fp, 4)); | $unpacked = unpack('iint', fread($this->fp, 4)); | ||
- | return $unpacked[int]; | + | return $unpacked["int"]; |
} | } | ||
Zeile 275: | Zeile 292: | ||
function get_float32() { | function get_float32() { | ||
$unpacked = unpack('fint', fread($this->fp, 4)); | $unpacked = unpack('fint', fread($this->fp, 4)); | ||
- | return $unpacked[int]; | + | return $unpacked["int"]; |
} | } | ||
// einen String vom Server holen | // einen String vom Server holen | ||
function get_string() { | function get_string() { | ||
+ | $str = ''; | ||
while(($char = fread($this->fp, 1)) != chr(0)) { | while(($char = fread($this->fp, 1)) != chr(0)) { | ||
$str .= $char; | $str .= $char; | ||
Zeile 299: | Zeile 317: | ||
$this->get_byte(); | $this->get_byte(); | ||
$challenge = $this->get_4(); | $challenge = $this->get_4(); | ||
- | return $challenge; | ||
fclose($this->fp); | fclose($this->fp); | ||
+ | return $challenge; | ||
+ | |||
} | } | ||
Zeile 372: | Zeile 391: | ||
// Server Angaben | // Server Angaben | ||
- | $ip = '85.131.170.95'; | + | $ip = '176.57.137.35'; |
$port = '27015'; | $port = '27015'; | ||
$mappic_path = 'http://meine-hp.de/mappics/css/'; | $mappic_path = 'http://meine-hp.de/mappics/css/'; | ||
Zeile 458: | Zeile 477: | ||
Auf dieses Tutorial darf frei Verlinkt werden.\\ | Auf dieses Tutorial darf frei Verlinkt werden.\\ | ||
So lange es hier im Wiki auf sourceserver.info verbleibt.\\ | So lange es hier im Wiki auf sourceserver.info verbleibt.\\ | ||
- | Wenn ihr das Tutorial oder Teile davon wo anders verwenden möchtet, bitte eine PM an [[http://sourceserver.info/memberlist.php?mode=viewprofile&u=57|HSFighter]]! | + | Wenn ihr das Tutorial oder Teile davon wo anders verwenden möchtet, bitte eine PM an [[http://sourceserver.info/user/57-hsfighter|HSFighter]]! |