Kann Server nicht auslesen

Irgendwelche Probleme mit XAMPP für Windows? Dann ist hier genau der richtige Ort um nachzufragen.

Kann Server nicht auslesen

Postby Technoboy » 17. March 2013 20:51

Nabend,

ich habe ein Problem mit XAMPP bzw PHP, vielleicht könnt Ihr mir ja helfen.
Wenn ich mit einem PHP Script die Infos von meinem Server (CoD) abfragen möchte funktioniert das nicht.
Er gibt mir eine Error-Meldung bzw einen unvollständigen Code aus :

Code: Select all
getServerStatus()){ $status->parseServerData(); $serverStatus = $status->returnServerData(); $players = $status->returnPlayers(); $pings = $status->returnPings(); $scores = $status->returnScores(); ?>


Das habe ich schon versucht :
XAMPP auf meinem Rechner aufgesetzt und Script getestet -> funktioniert
Server mit *.exe File angepingt und ausgelesen -> funktioniert
Script auf einem Root mit ISS (Microsoft Webserver?) getestet -> funktioniert

Wenn ich im Startmanager von XAMPP auf Netstat klicke sind auch die Ports als "Offener Socket" (weiß) markiert.
Ich hoffe Ihr könnt mir helfen. Habe die Scripts mal als Code angehängt.

Danke

Das ist der Code mit dem ich arbeite, um es abzurufen : (Index.php)
Code: Select all
<?
   include('COD4ServerStatus.php');
   
   $status = new COD4ServerStatus('188.138.113.43', '28990');   
   
   if ($status->getServerStatus()){
      $status->parseServerData();
      
      $serverStatus = $status->returnServerData();
      
      $players = $status->returnPlayers();
      $pings = $status->returnPings();
      $scores = $status->returnScores();
      
      ?>
           <h1>Server: <? echo $serverStatus['sv_hostname'];?></h1>     
            Admin: <? echo $serverStatus['_Admin'];?><br />
            Email: <? echo $serverStatus['_Email'];?><br />
            IRC: <? echo $serverStatus['Irc'];?><br />
            Location: <? echo $serverStatus['_Location']; ?><br />
         Website: <a href="http://<? echo $serverStatus['_Website']; ?>">http://<? echo $serverStatus['_Website']; ?></a><br /><br />

         <table width="50%" cellspacing="1" cellpadding="1" border="1">
               <tr>
                   <td style="border:0px;" colspan="4">
                       <img src="img<? echo $serverStatus['mapname']; ?>.jpg" alt="<? echo $serverStatus['mapname']; ?>" align="left" style="margin-right:10px;" />
                        <h3><? echo $serverStatus['mapname']; ?></h3>
                    </td>
                </tr>
               <tr>
                   <th width="5%">#</th>
                    <th>Player</th>
                    <th width="15%">Score</th>
                    <th width="15%">Ping (ms)</th>
                </tr>
      <?
         $rank = 1;
            foreach($players as $i => $v){
        ?>
              <tr>
                   <td><? echo $rank; ?></td>
                    <td><? echo $players[$i]; ?></td>
                    <td><? echo $scores[$i]; ?></td>
                    <td><? echo $pings[$i]; ?></td>
                </tr>
        <?
            $rank++;
            }
        ?>
            </table>           
      <?
   }
?>


Und das die dazugehörige COD4ServerStatus.php
Code: Select all
<?
   class COD4ServerStatus{
      var $server = '188.138.113.43';
      var $port = '28990';
      var $protocol = 'udp';
      var $data = '';
      var $serverData = array();
      var $players = array();
      var $scores = array();
      var $pings = array();
      var $meta = array();
      var $timeout = 1;
      
      function COD4ServerStatus($server, $port, $timeout = 1){
         $this->server = $server;
         $this->port = $port;
         $this->timeout = $timeout;
      }
      
      function getServerStatus(){
         $error = false;
         
         if (!empty($this->server) && !empty($this->port)){               
            $handle = @fsockopen($this->protocol . '://' . $this->server, $this->port);
            
            if ($handle){            
               // had to do this... trying to figure out a way not to do this
               socket_set_timeout($handle, $timeout);
               stream_set_blocking($handle, 1);
               stream_set_timeout($handle, 5);
               /////////////////////////////////
                     
               fputs($handle, "\xFF\xFF\xFF\xFFgetstatus\x00");
               fwrite($handle, "\xFF\xFF\xFF\xFFgetstatus\x00");               
               
               // we have to do one read out here to set meta data
               $this->data = fread($handle, 8192);
               $this->meta = stream_get_meta_data($handle);
               $counter = 8192;
               ////////////
               
               while (!feof($handle) && !$error && $counter < $this->meta['unread_bytes']){
                  $this->data .= fread($handle, 8192);
                  $this->meta = stream_get_meta_data($handle);
                  
                  if ($this->meta['timed_out']){
                     $error = true;
                  }
                  
                  $counter += 8192;
               }
               
               if ($error){
                  echo 'Request timed out.';
                  return false;                     
               }else{
                  if (strlen(trim($this->data)) == 0){                     
                     echo 'No data received from server.';
                     return false;
                  }else{
                     return true;
                  }
               }
            }else{
               echo 'Could not connect to server.';
               return false;
            }
            
            fclose($handle);
         }
      }
      
      function parseServerData(){
         $this->serverData = explode("\n", $this->data);
         //$this->serverData = array_shift($this->serverData); THIS WAS MISBEHAVING

         $tempplayers = array();

         for ($i = 2; $i <= sizeof($this->serverData) - 1; $i++){
         
            $tempplayers[sizeof($tempplayers)] = trim($this->serverData[$i]);
         }
         
         $tempdata = array();
         $tempdata = explode('\\', $this->serverData[1]);
         $this->serverData = array();
         
         foreach($tempdata as $i => $v){
            if (fmod($i, 2) == 1){
               $t = $i + 1;
               
               $this->serverData[$v] = $tempdata[$t];
            }
         }
         
         $this->serverData['sv_hostname'] = $this->colorCode($this->serverData['sv_hostname']);
         $this->serverData['_Maps'] = explode('-', $this->serverData['_Maps']);

         // frags ping "player name"
         foreach($tempplayers as $i => $v){
                     
            if (strlen(trim($v)) > 1){
               $temp = explode(' ', $v);               

               $this->scores[sizeof($this->scores)] = $temp[0];
               $this->pings[sizeof($this->pings)] = $temp[1];
               
               $pos = strpos($v, '"') + 1;
               $endPos = strlen($v) - 1;
               
               $this->players[sizeof($this->players)] = substr($v, $pos, $endPos - $pos);
            }
         }         
      }
      
      function colorCode($string){
         $string .= "^";
      
         $find = array(
            '/\^0(.*?)\^/is',
            '/\^1(.*?)\^/is',
            '/\^2(.*?)\^/is',
            '/\^3(.*?)\^/is',
            '/\^4(.*?)\^/is',
            '/\^5(.*?)\^/is',
            '/\^6(.*?)\^/is',
            '/\^7(.*?)\^/is',
            '/\^8(.*?)\^/is',
            '/\^9(.*?)\^/is',                                                                        
         );
         
         $replace = array(
            '<span style="color:#000000;">$1</span>^',
            '<span style="color:#F65A5A;">$1</span>^',
            '<span style="color:#00F100;">$1</span>^',
            '<span style="color:#EFEE04;">$1</span>^',
            '<span style="color:#0F04E8;">$1</span>^',
            '<span style="color:#04E8E7;">$1</span>^',
            '<span style="color:#F75AF6;">$1</span>^',
            '<span style="color:#FFFFFF;">$1</span>^',
            '<span style="color:#7E7E7E;">$1</span>^',
            '<span style="color:#6E3C3C;">$1</span>^',            
         );
         
         
         $string = preg_replace($find, $replace, $string);
         return substr($string, 0, strlen($string) - 1);
      }
      
      function returnData(){
         return $this->data;
      }
      
      function returnMeta(){
         return $this->meta;
      }
      
      function returnServerData(){
         return $this->serverData;
      }
      
      function returnPlayers(){
         return $this->players;
      }
      
      function returnPings(){
         return $this->pings;
      }
      
      function returnScores(){
         return $this->scores;
      }
   }
?>
Technoboy
 
Posts: 2
Joined: 17. March 2013 20:45
Operating System: Windows Server 2008

Re: Kann Server nicht auslesen

Postby Altrea » 17. March 2013 21:14

Hallo Technoboy,

Dein Problem ist, dass du short_open_tag verwendest.
Damit ist dein Code Abhängig von einer PHP-Einstellung und diese ist in der aktuellen XAMPP Version deaktiviert.

mit freundlichen Grüßen,
Altrea
We don't provide any support via personal channels like PM, email, Skype, TeamViewer!

It's like porn for programmers 8)
User avatar
Altrea
AF Moderator
 
Posts: 11926
Joined: 17. August 2009 13:05
XAMPP version: several
Operating System: Windows 11 Pro x64

Re: Kann Server nicht auslesen

Postby Technoboy » 17. March 2013 21:43

Hi, danke für die Antwort. Wo nutze ich das denn? Bzw wo steht das im Quelltext.
Technoboy
 
Posts: 2
Joined: 17. March 2013 20:45
Operating System: Windows Server 2008

Re: Kann Server nicht auslesen

Postby Altrea » 18. March 2013 21:02

Steht doch alles in dem Link, wie so ein short_open_tag aussieht :shock:
We don't provide any support via personal channels like PM, email, Skype, TeamViewer!

It's like porn for programmers 8)
User avatar
Altrea
AF Moderator
 
Posts: 11926
Joined: 17. August 2009 13:05
XAMPP version: several
Operating System: Windows 11 Pro x64


Return to XAMPP für Windows

Who is online

Users browsing this forum: No registered users and 15 guests