PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Без описания
Поиск в теме | Версия для печати
Safok
Отправлено: 05 Марта, 2013 - 19:06:22
Гость
Покинул форум
Сообщений всего: 96
Дата рег-ции: Март 2013
Помог: 0 раз(а)
[+]
Помогите с выводом мониторинг.. ОЧ СРОЧНО НАДО!
Спойлер (Отобразить ) PHP:
скопировать код в буфер обмена
<?PHP
/**
*
* @author Edward McKnight (EM-Creations.co.uk)
*/
/* *****************************************************************
// SampQuery.class.php
// Version 1.0
// This class connects to a specific SA-MP server via sockets.
// Copyright 2012 Edward McKnight (EM-Creations.co.uk)
// Creative Commons Attribution-NoDerivs 3.0 Unported License
// http://creativecommons.org/licenses/by-nd/3.0/
// Credits to Westie for the original PHP SA-MP API and inspiration for this API.
* *****************************************************************/
class SampQuery {
private $sock = null ;
private $server = "195.112.231.229" ;
private $port = "7777" ;
/**
* Creates a new SampQuery object.
* @param $server server hostname
* @param $port port of the server
*/
public function __construct( $server , $port = 7777)
{
$this -> server = $server ;
$this -> port = $port ;
$this -> sock = fsockopen ( "udp://" . $this -> server , $this -> port , $errorNum , $errorString , 2
) ; }
///UPUPUPUPUP
public function getInfo( ) {
@ fwrite ( $this -> sock , $this -> assemblePacket ( "i" ) ) ;
$serverInfo [ 'password' ] = ( integer
) ord ( fread ( $this -> sock , 1
) ) ;
$serverInfo [ 'players' ] = ( integer
) $this -> toInt ( fread ( $this -> sock , 2
) ) ;
$serverInfo [ 'maxplayers' ] = ( integer
) $this -> toInt ( fread ( $this -> sock , 2
) ) ;
if ( ! $strLen ) return - 1 ;
$serverInfo [ 'hostname' ] = ( string
) fread ( $this -> sock , $strLen ) ;
$serverInfo [ 'gamemode' ] = ( string
) fread ( $this -> sock , $strLen ) ;
$serverInfo [ 'map' ] = ( string
) fread ( $this -> sock , $strLen ) ;
return $serverInfo ;
}
public function getBasicPlayers( ) {
@ fwrite ( $this -> sock , $this -> assemblePacket ( "c" ) ) ;
$playerCount = ord ( fread ( $this -> sock , 2
) ) ;
if ( $playerCount > 0) {
for ( $i = 0 ; $i < $playerCount ; ++ $i ) {
(
"name" => ( string
) fread ( $this -> sock , $strLen ) , "score" => ( integer
) $this -> toInt ( fread ( $this -> sock , 4
) ) , ) ;
}
}
return $players ;
}
public function getDetailedPlayers( ) {
@ fwrite ( $this -> sock , $this -> assemblePacket ( "d" ) ) ;
$playerCount = ord ( fread ( $this -> sock , 2
) ) ;
for ( $i = 0 ; $i < $playerCount ; ++ $i ) {
$player [ 'playerid' ] = ( integer
) ord ( fread ( $this -> sock , 1
) ) ;
$player [ 'nickname' ] = ( string
) fread ( $this -> sock , $strLen ) ;
$player [ 'score' ] = ( integer
) $this -> toInt ( fread ( $this -> sock , 4
) ) ; $player [ 'ping' ] = ( integer
) $this -> toInt ( fread ( $this -> sock , 4
) ) ;
$players [ $i ] = $player ;
}
return $players ;
}
/**
* Returns an array of server rules.
* @return Array[]
* (
* [gravity] => gravity
* [mapname] => map
* [version] => version
* [weather] => weather
* [weburl] => weburl
* [worldtime] => worldtime
* )
*/
public function getRules( ) {
@ fwrite ( $this -> sock , $this -> assemblePacket ( "r" ) ) ;
$ruleCount = ord ( fread ( $this -> sock , 2
) ) ;
for ( $i = 0 ; $i < $ruleCount ; ++ $i ) {
$rule = ( string
) fread ( $this -> sock , $strLen ) ;
$rules [ $rule ] = ( string
) fread ( $this -> sock , $strLen ) ; }
return $rules ;
}
/**
* Returns the server's ping.
* @return integer
*/
public function getPing( ) {
$ping = 0 ;
@ fwrite ( $this -> sock , $this -> assemblePacket ( "r" ) ) ;
$ping = ( $afterReceive - $beforeSend ) * 1000 ;
}
private function toInt( $string ) {
if ( $string === "" ) {
return null ;
}
$int = 0 ;
$int += ( ord ( $string [ 0
] ) ) ;
$int += ( ord ( $string [ 1
] ) << 8
) ; }
$int += ( ord ( $string [ 2
] ) << 16
) ; }
$int += ( ord ( $string [ 3
] ) << 24
) ; }
if ( $int >= 4294967294) {
$int -= 4294967296 ;
}
return $int ;
}
private function assemblePacket( $type ) {
$packet = "SAMP" ;
$packet .= chr ( $this -> port & 0xFF
) ; $packet .= chr ( $this -> port >> 8
& 0xFF
) ; $packet .= $type ;
return $packet ;
}
/**
* Attempts to connect to the server and returns whether it was successful.
* @return boolean
*/
public function connect( ) {
$connected = false ;
fwrite ( $this -> sock , $this -> assemblePacket ( "p0101" ) ) ;
if ( fread ( $this -> sock , 10
) ) { if ( fread ( $this -> sock , 5 ) == 'p0101' ) { $connected = true ;
}
}
return $connected ;
}
/**
* Closes the connection
*/
public function close( ) {
}
}
Вывожу:
Спойлер (Отобразить ) PHP:
скопировать код в буфер обмена
<?PHP
if ( isset ( $_GET [ 'server' ] ) ) { $ips = $_GET [ 'server' ] ; } if ( isset ( $_GET [ 'port' ] ) ) { $ports = $_GET [ 'port' ] ; }
include ( 'SampQuery.class.php' ) ;
$Server = public function getInfo( ) ( $ips , $ports ) ;
$playeron = $Server -> players ;
$playermax = $Server -> maxplayers ;
$Server -> Online ? $statusi = 1 : $statusi = 0 ;
$igroki = 'Role Play ' . $Server -> players . '/' . $Server -> maxplayers ;
if ( $statusi == 1) {
$igrok = 220* $playeron / $playermax ;
$igro = $igroki ;
} else {
$igrok = '220' ;
$igro = 'OFFLINE' ;
}
header ( "Content-Type: image/png" ) ; if ( $statusi == 0) {
$cvet = $red ;
} else {
$cvet = $gren ;
}
$font_path = 'MyriadPro.otf' ;
imagettftext ( $image , 13
, 0
, 70
, 15
, $blek , $font_path , $igro ) ; /*Размер шрифта, поворот текста, отступ текста от начала, опускание текста вниз*/ ?>
Safok
Отправлено: 05 Марта, 2013 - 19:55:08
Гость
Покинул форум
Сообщений всего: 96
Дата рег-ции: Март 2013
Помог: 0 раз(а)
[+]
Переменная $igro создана в блоке if, а значит только там она и доступна
PHP:
скопировать код в буфер обмена
Мне надо рисовать только "онлайн/макс.онлайн" , ошибка в строке
$Server = public function getInfo( ) ( $ips , $ports ) ;
Safok
Отправлено: 05 Марта, 2013 - 20:22:06
Гость
Покинул форум
Сообщений всего: 96
Дата рег-ции: Март 2013
Помог: 0 раз(а)
[+]
Получился вот такой код:
status.php
PHP:
скопировать код в буфер обмена
<?PHP
include ( 'SampQuery.class.php' ) ;
$query = new SampQuery( $_GET [ 'server' ] , $_GET [ 'port' ] ) ;
$Server = $query -> getInfo ( ) ;
$playeron = $Server -> players ;
$playermax = $Server -> maxplayers ;
$Server -> Online ? $statusi = 1 : $statusi = 0 ;
$igroki = 'Role Play ' . $Server -> players . '/' . $Server -> maxplayers ;
if ( $statusi == 1) {
$igrok = 220* $playeron / $playermax ;
$igro = $igroki ;
} else {
$igrok = '220' ;
$igro = 'OFFLINE' ;
}
header ( "Content-Type: image/png" ) ; if ( $statusi == 0) {
$cvet = $red ;
} else {
$cvet = $gren ;
}
$font_path = 'MyriadPro.otf' ;
imagettftext ( $image , 13
, 0
, 70
, 15
, $blek , $font_path , $igro ) ; /*Размер шрифта, поворот текста, отступ текста от начала, опускание текста вниз*/ ?>
SampQuery.class
PHP:
скопировать код в буфер обмена
<?PHP
/**
*
* @author Edward McKnight (EM-Creations.co.uk)
*/
/* *****************************************************************
// SampQuery.class.php
// Version 1.0
// This class connects to a specific SA-MP server via sockets.
// Copyright 2012 Edward McKnight (EM-Creations.co.uk)
// Creative Commons Attribution-NoDerivs 3.0 Unported License
// http://creativecommons.org/licenses/by-nd/3.0/
// Credits to Westie for the original PHP SA-MP API and inspiration for this API.
* *****************************************************************/
class SampQuery {
private $sock = null ;
private $server = "195.112.231.229" ;
private $port = "7777" ;
/**
* Creates a new SampQuery object.
* @param $server server hostname
* @param $port port of the server
*/
public function __construct( $server , $port = 7777)
{
$this -> server = $server ;
$this -> port = $port ;
$this -> sock = fsockopen ( "udp://" . $this -> server , $this -> port , $errorNum , $errorString , 2
) ; }
///UPUPUPUPUP
public function getInfo( ) {
@ fwrite ( $this -> sock , $this -> assemblePacket ( "i" ) ) ;
$serverInfo [ 'password' ] = ( integer
) ord ( fread ( $this -> sock , 1
) ) ;
$serverInfo [ 'players' ] = ( integer
) $this -> toInt ( fread ( $this -> sock , 2
) ) ;
$serverInfo [ 'maxplayers' ] = ( integer
) $this -> toInt ( fread ( $this -> sock , 2
) ) ;
if ( ! $strLen ) return - 1 ;
$serverInfo [ 'hostname' ] = ( string
) fread ( $this -> sock , $strLen ) ;
$serverInfo [ 'gamemode' ] = ( string
) fread ( $this -> sock , $strLen ) ;
$serverInfo [ 'map' ] = ( string
) fread ( $this -> sock , $strLen ) ;
return $serverInfo ;
}
public function getBasicPlayers( ) {
@ fwrite ( $this -> sock , $this -> assemblePacket ( "c" ) ) ;
$playerCount = ord ( fread ( $this -> sock , 2
) ) ;
if ( $playerCount > 0) {
for ( $i = 0 ; $i < $playerCount ; ++ $i ) {
(
"name" => ( string
) fread ( $this -> sock , $strLen ) , "score" => ( integer
) $this -> toInt ( fread ( $this -> sock , 4
) ) , ) ;
}
}
return $players ;
}
public function getDetailedPlayers( ) {
@ fwrite ( $this -> sock , $this -> assemblePacket ( "d" ) ) ;
$playerCount = ord ( fread ( $this -> sock , 2
) ) ;
for ( $i = 0 ; $i < $playerCount ; ++ $i ) {
$player [ 'playerid' ] = ( integer
) ord ( fread ( $this -> sock , 1
) ) ;
$player [ 'nickname' ] = ( string
) fread ( $this -> sock , $strLen ) ;
$player [ 'score' ] = ( integer
) $this -> toInt ( fread ( $this -> sock , 4
) ) ; $player [ 'ping' ] = ( integer
) $this -> toInt ( fread ( $this -> sock , 4
) ) ;
$players [ $i ] = $player ;
}
return $players ;
}
/**
* Returns an array of server rules.
* @return Array[]
* (
* [gravity] => gravity
* [mapname] => map
* [version] => version
* [weather] => weather
* [weburl] => weburl
* [worldtime] => worldtime
* )
*/
public function getRules( ) {
@ fwrite ( $this -> sock , $this -> assemblePacket ( "r" ) ) ;
$ruleCount = ord ( fread ( $this -> sock , 2
) ) ;
for ( $i = 0 ; $i < $ruleCount ; ++ $i ) {
$rule = ( string
) fread ( $this -> sock , $strLen ) ;
$rules [ $rule ] = ( string
) fread ( $this -> sock , $strLen ) ; }
return $rules ;
}
/**
* Returns the server's ping.
* @return integer
*/
public function getPing( ) {
$ping = 0 ;
@ fwrite ( $this -> sock , $this -> assemblePacket ( "r" ) ) ;
$ping = ( $afterReceive - $beforeSend ) * 1000 ;
}
private function toInt( $string ) {
if ( $string === "" ) {
return null ;
}
$int = 0 ;
$int += ( ord ( $string [ 0
] ) ) ;
$int += ( ord ( $string [ 1
] ) << 8
) ; }
$int += ( ord ( $string [ 2
] ) << 16
) ; }
$int += ( ord ( $string [ 3
] ) << 24
) ; }
if ( $int >= 4294967294) {
$int -= 4294967296 ;
}
return $int ;
}
private function assemblePacket( $type ) {
$packet = "SAMP" ;
$packet .= chr ( $this -> port & 0xFF
) ; $packet .= chr ( $this -> port >> 8
& 0xFF
) ; $packet .= $type ;
return $packet ;
}
/**
* Attempts to connect to the server and returns whether it was successful.
* @return boolean
*/
public function connect( ) {
$connected = false ;
fwrite ( $this -> sock , $this -> assemblePacket ( "p0101" ) ) ;
if ( fread ( $this -> sock , 10
) ) { if ( fread ( $this -> sock , 5 ) == 'p0101' ) { $connected = true ;
}
}
return $connected ;
}
/**
* Closes the connection
*/
public function close( ) {
}
}
Ошибки:
CODE (
htmlphp ):
скопировать код в буфер обмена
Warning: fsockopen() [function.fsockopen]: unable to connect to udp://:0 (Failed to parse address "") in Z:\home\test1.ru\www\monitor\server1\SampQuery.class.php on line 32
Warning: socket_set_timeout() expects parameter 1 to be resource, boolean given in Z:\home\test1.ru\www\monitor\server1\SampQuery.class.php on line 33
Warning: fread() expects parameter 1 to be resource, boolean given in Z:\home\test1.ru\www\monitor\server1\SampQuery.class.php on line 40
Warning: fread() expects parameter 1 to be resource, boolean given in Z:\home\test1.ru\www\monitor\server1\SampQuery.class.php on line 44
Warning: fread() expects parameter 1 to be resource, boolean given in Z:\home\test1.ru\www\monitor\server1\SampQuery.class.php on line 46
Warning: fread() expects parameter 1 to be resource, boolean given in Z:\home\test1.ru\www\monitor\server1\SampQuery.class.php on line 48
Warning: fread() expects parameter 1 to be resource, boolean given in Z:\home\test1.ru\www\monitor\server1\SampQuery.class.php on line 50
Warning: Cannot modify header information - headers already sent by (output started at Z:\home\test1.ru\www\monitor\server1\SampQuery.class.php:32) in Z:\home\test1.ru\www\monitor\server1\status.php on line 18
� PNG IHDR� � Nk!PLTE������ ?� � __C� � IDATH��� A � @`�� 3o!o��� 8� h'�� #<@ x& #65533;ٸ��Ek��`- f�������h�������R�bj��apv�]�z���#u�bc9�s��^ ���Dc���/�G��3�G�8
$& #65533;c�/.� �ZC���T_@H��yrmk�s��)�%�°��I��;y��V��Dq��K�ϛ�����I��d�9wY���@y���r�IEND�B`�
(Отредактировано автором: 05 Марта, 2013 - 20:23:14)
Мелкий
Отправлено: 06 Марта, 2013 - 08:27:44
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009
Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Safok пишет: unable to connect to udp://:0 (Failed to parse address "")
Вы здесь видите ip (или хостнейм) и порт?
Я не вижу. PHP - тоже.
Следовательно - их и нету. Не пришли из $_GET'а.
NoPaper пишет: Переменная $igro создана в блоке if, а значит только там она и доступна
Путаете с каким-то другим языком. PHP не выделяет if'ы в отдельные области видимости.
Поиск в теме | Версия для печати
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
Powered by ExBB FM 1.0 RC1. InvisionExBB