[POMOC] SA-MP Server info skripta

Započeo Terza, Januar 02, 2014, 18:52:49 POSLE PODNE

prethodna tema - sledeća tema

0 članova i 1 gost pregledaju ovu temu.

Kao što sam naziv kaže potrebna mi je skripta koja pokazuje informacije samp servera na nekoj web stranici. Naime ja sam skinuo neku skriptu i na localhostu je testirao i ona radi perfektno, ali kada je uploadam na neki hosting onda šteka. Evo ispod kod pa ako neko zna do čega je i pomogne bit ću mu zahvalan.

Index.php
<?phprequire "samp_query.php";$serverIP = "91.121.209.20";$serverPort = 7777;try{        $rQuery = new QueryServer( $serverIP, $serverPort );        $aInformation  = $rQuery->GetInfo( );        $aServerRules  = $rQuery->GetRules( );        $aBasicPlayer  = $rQuery->GetPlayers( );        $aTotalPlayers = $rQuery->GetDetailedPlayers( );        $rQuery->Close( );}catch (QueryServerException $pError){       echo 'Server is offline';}if(isset($aInformation) && is_array($aInformation)){?>

    <b>General Information</b>
    <table width="400">
            <tr>
                    <td>Hostname</td>
                    <td>
<?php echo htmlentities($aInformation['Hostname']); ?>
</td>
            </tr>
            <tr>
                    <td>Gamemode</td>
                    <td>
<?php echo htmlentities($aInformation['Gamemode']); ?>
</td>
            </tr>
            <tr>
                    <td>Players</td>
                    <td>
<?php echo $aInformation['Players']; ?>
/
<?php echo $aInformation['MaxPlayers']; ?>
</td>
            </tr>
            <tr>
                    <td>Map</td>
                    <td>
<?php echo htmlentities($aInformation['Map']); ?>
</td>
            </tr>
            <tr>
                    <td>Weather</td>
                    <td>
<?php echo $aServerRules['weather']; ?>
</td>
            </tr>
            <tr>
                    <td>Time</td>
                    <td>
<?php echo $aServerRules['worldtime']; ?>
</td>
            </tr>
            <tr>
                    <td>Version</td>
                    <td>
<?php echo $aServerRules['version']; ?>
</td>
            </tr>
            <tr>
                    <td>Password</td>
                    <td>
<?php echo $aInformation['Password'] ? 'Yes' : 'No'; ?>
</td>
            </tr>
    </table>

    <br />
    <b>Online Players</b>
   
<?php    if(!is_array($aTotalPlayers) || count($aTotalPlayers) == 0){            echo '<br /><i>None</i>';    } else {    ?>

        <table width="400">
                <tr>
                        <td><b>Player ID</b></td>
                        <td><b>Nickname</b></td>
                        <td><b>Score</b></td>
                        <td><b>Ping</b></td>
                </tr>
       
<?php        foreach($aTotalPlayers AS $id => $value){        ?>

                <tr>
                        <td>
<?php echo $value['PlayerID']; ?>
</td>
                        <td>
<?php echo htmlentities($value['Nickname']); ?>
</td>
                        <td>
<?php echo $value['Score']; ?>
</td>
                        <td>
<?php echo $value['Ping']; ?>
</td>
                </tr>
       
<?php        }            echo '</table>';    }}?>


samp-query.php
<?php/*********************************************** SA-MP Query Server Version 0.3** This class provides you with an easy to use interface to query* your SA-MP 0.2 servers. Usage is simple, but has changed a bit* since the last version, so be sure to check out the examples* that come along with this script. It is updated with some of* the new SA-MP 0.2 query-techniques that can be used.** Author:  Peter Beverloo*          [email protected]*          Ex SA-MP Developer** Updated: Wouter van Eekelen*          [email protected]*          SA-MP Betatester*********************************************/class QueryServer{    // Private variables used for the query-ing.    private $szServerIP;    private $iPort;    private $rSocketID;    private $bStatus;    // The __construct function gets called automatically    // by PHP once the class gets initialized.    function __construct( $szServerIP, $iPort )    {            $this->szServerIP = $this->VerifyAddress( $szServerIP );            $this->iPort = $iPort;            if (empty( $this->szServerIP ) || !is_numeric( $iPort )) {                    throw new QueryServerException( 'Either the ip-address or the port isn\'t filled in correctly.' );            }            $this->rSocketID = @fsockopen( 'udp://' . $this->szServerIP, $iPort, $iErrorNo, $szErrorStr, 5 );            if (!$this->rSocketID) {                    throw new QueryServerException( 'Cannot connect to the server: ' . $szErrorStr );            }            socket_set_timeout( $this->rSocketID, 0, 500000 );            $this->bStatus = true;    }    // The VerifyAddress function verifies the given hostname/    // IP address and returns the actual IP Address.    function VerifyAddress( $szServerIP )    {            if (ip2long( $szServerIP ) !== false &&                 long2ip( ip2long( $szServerIP ) ) == $szServerIP ) {                    return $szServerIP;            }            $szAddress = gethostbyname( $szServerIP );            if ($szAddress == $szServerIP) {                    return "";            }            return $szAddress;    }    // The SendPacket function sends a packet to the server which    // requests information, based on the type of packet send.    function SendPacket( $cPacket )    {            $szPacket = 'SAMP';            $aIpChunks = explode( '.', $this->szServerIP );            foreach( $aIpChunks as $szChunk ) {                    $szPacket .= chr( $szChunk );            }            $szPacket .= chr( $this->iPort & 0xFF );            $szPacket .= chr( $this->iPort >> 8 & 0xFF );            $szPacket .= $cPacket;            return fwrite( $this->rSocketID, $szPacket, strlen( $szPacket ) );    }    // The GetPacket() function returns a specific number of bytes    // read from the socket. This uses a special way of getting stuff.    function GetPacket( $iBytes )    {            $iResponse = fread( $this->rSocketID, $iBytes );            if ($iResponse === false) {                    throw new QueryServerException( 'Connection to ' . $this->szServerIP . ' failed or has dropped.' );            }            $iLength = ord( $iResponse );            if ($iLength > 0)                    return fread( $this->rSocketID, $iLength );            return "";    }    // After we're done, the connection needs to be closed using    // the Close() function. Otherwise stuff might go wrong.    function Close( )    {            if ($this->rSocketID !== false) {                    fclose( $this->rSocketID );            }    }    // A little function that's needed to properly convert the    // four bytes we're recieving to integers to an actual PHP    // integer. ord() can't handle value's higher then 255.    function toInteger( $szData )    {            $iInteger = 0;            $iInteger += ( ord( @$szData[ 0 ] ) );            $iInteger += ( ord( @$szData[ 1 ] ) << 8 );            $iInteger += ( ord( @$szData[ 2 ] ) << 16 );            $iInteger += ( ord( @$szData[ 3 ] ) << 24 );            if( $iInteger >= 4294967294 )                    $iInteger -= 4294967296;            return $iInteger;    }    // The GetInfo() function returns basic information about the    // server, like the hostname, number of players online etc.    function GetInfo( )    {            if ($this->SendPacket('i') === false) {                    throw new QueryServerException( 'Connection to ' . $this->szServerIP . ' failed or has dropped.' );            }            $szFirstData = fread( $this->rSocketID, 4 );            if (empty( $szFirstData ) || $szFirstData != 'SAMP') {                    throw new QueryServerException( 'The server at ' . $this->szServerIP . ' is not an SA-MP Server.' );            }            // Pop the first seven characters returned.            fread( $this->rSocketID, 7 );            return array (                    'Password'   =>   ord( fread( $this->rSocketID, 1 ) ),                    'Players'    =>   $this->toInteger( fread( $this->rSocketID, 2 ) ),                    'MaxPlayers' =>   $this->toInteger( fread( $this->rSocketID, 2 ) ),                    'Hostname'   =>   $this->GetPacket( 4 ),                    'Gamemode'   =>   $this->GetPacket( 4 ),                    'Map'        =>   $this->GetPacket( 4 )            );    }    // The GetRules() function returns the rules which are set    // on the server, e.g. the gravity, version etcetera.    function GetRules( )    {            if ($this->SendPacket('r') === false) {                    throw new QueryServerException( 'Connection to ' . $this->szServerIP . ' failed or has dropped.' );            }            // Pop the first 11 bytes from the response;            fread( $this->rSocketID, 11 );            $iRuleCount = ord( fread( $this->rSocketID, 2 ) );            $aReturnArray = array( );            for( $i = 0; $i < $iRuleCount; $i ++ ) {                    $szRuleName = $this->GetPacket( 1 );                    $aReturnArray[ $szRuleName ] = $this->GetPacket( 1 );            }            return $aReturnArray;    }    // The GetPlayers() function is pretty much simelar to the    // detailed function, but faster and contains less information.    function GetPlayers( )    {            if ($this->SendPacket('c') === false) {                    throw new QueryServerException( 'Connection to ' . $this->szServerIP . ' failed or has dropped.' );            }            // Again, pop the first eleven bytes send;            fread( $this->rSocketID, 11 );            $iPlayerCount = ord( fread( $this->rSocketID, 2 ) );            $aReturnArray = array( );            for( $i = 0; $i < $iPlayerCount; $i ++ )            {                    $aReturnArray[ ] = array (                            'Nickname' => $this->GetPacket( 1 ),                            'Score'    => $this->toInteger( fread( $this->rSocketID, 4 ) )                    );            }            return $aReturnArray;    }    // The GetDetailedPlayers() function returns the player list,    // but in a detailed form inclusing the score and the ping.    function GetDetailedPlayers( )    {            if ($this->SendPacket('d') === false) {                    throw new QueryServerException( 'Connection to ' . $this->szServerIP . ' failed or has dropped.' );            }            // Skip the first 11 bytes of the response;            fread( $this->rSocketID, 11 );            $iPlayerCount = ord( fread( $this->rSocketID, 2 ) );            $aReturnArray = array( );            for( $i = 0; $i < $iPlayerCount; $i ++ ) {                    $aReturnArray[ ] = array(                            'PlayerID'   =>  $this->toInteger( fread( $this->rSocketID, 1 ) ),                            'Nickname'   =>  $this->GetPacket( 1 ),                            'Score'      =>  $this->toInteger( fread( $this->rSocketID, 4 ) ),                            'Ping'       =>  $this->toInteger( fread( $this->rSocketID, 4 ) )                    );            }            return $aReturnArray;    }function RCON($rcon, $command)    {            echo 'Password '.$rcon.' with '.$command;            if ($this->SendPacket('x '.$rcon.' '.$command) === false) {                    throw new QueryServerException( 'Connection to ' . $this->szServerIP . ' failed or has dropped.' );            }            // Pop the first 11 bytes from the response;            $aReturnArray = fread( $this->rSocketID, 11 );            echo fread( $this->rSocketID, 11 );            return $aReturnArray;    }}/*********************************************** The QueryServerException is used to throw errors when querying* a specific server. That way we force the user to use proper* error-handling, and preferably even a try-/catch statement.***********************************************/class QueryServerException extends Exception{    // The actual error message is stored in this variable.    private $szMessage;    // Again, the __construct function gets called as soon    // as the exception is being thrown, in here we copy the message.    function __construct( $szMessage )    {            $this->szMessage = $szMessage;    }    // In order to read the exception being thrown, we have    // a .NET-like toString() function, which returns the message.    function toString( )    {            return $this->szMessage;    }}?>
Pravim web stranice za novac!
Osobni portofolio http:terza.com.ba/ !
Kontakt imate na stranici!

Ovakvi queryji za uzimanje podataka sa servera ne rade na free hostovima, uploadaj na neki zakupljeni host i tamo ce raditi. Ali evo sada sam pogledao kod i ova skripta ce da ima veliki load bar 0.3 s sto je previse, moja skripta za uzimanje podataka sa sampa ima load 0.0004s...
Poslednja Izmena: Januar 03, 2014, 08:06:26 PRE PODNE od Angle

About

Welcome to the community!