Jump to content

Проблемы с php sdk


Recommended Posts

Posted

Не совсем относится к луа, но к мта точно. В общем решил поставить на сайт простой пхп скрипт, который выводит имя текущей карты.

Собственно, код пхп:

include( "mta_sdk.php" );$mtaServer = new mta( $s_ip, $s_port ); //$s_ip и $s_port объявлены выше (айпишник и порт)$retn_m = $mtaServer -> getResource( "myResource" ) -> call( "getCurrentMap" ); echo "Текущая карта: ".$retn_m[ 0 ];

Моя функция 'getCurrentMap':

function getCurrentMap() 
  return getMapName(); 
end; 

Все прекрасно выводится на страничку, проблем нет. Но одна загвоздка: если часто обновлять страницу, либо к странице обращаются несколько человек, вместо названия карты вылетает ошибка:

Notice: Undefined offset: 1 in mta_sdk.php on line 182

Notice: Undefined offset: 1 in mta_sdk.php on line 185

Не буду описывать, что находится в тех злополучных строках, скрипт mta_sdk без труда можно достать с мта вики.

Ну и после некоторого времени, если обновить страничку, все работает так, как надо. Но если опять начать часто обновлять страницу, появляется все то, что описал выше.

Сломал себе голову. Пробовал вместо include писать include_once и require_once - не помогло.

Кто встречался с такой проблемой, подскажите решение.

Posted

Незнаю в чем проблема, но можно сделать все немного проще и надежнее. Зачем каждый раз при загрузке страницы спрашивать у сервера название карты? При загрузке карты отправляй на сайт её название (в текстовый файл, бд), а потом при загрузке страницы бери название из файла.

Posted

название карты можно прекрасно и 100%тно получить без PHP SDK

$MAP_NAME = 'Unknown'; 
  
$mtasa_ip =     '127.0.0.1'; // какой хотите поставьте 
$mtasa_port =   22003; 
$mtasa_pre =    'EYE1'; 
$mtasa_fp =     fsockopen( "udp://{$mtasa_ip}", (string) ($mtasa_port+123),  
                    $mtasa_errno, $mtasa_errstr, 3 ); 
  
if ( $mtasa_fp !== FALSE ) 
{ 
    fwrite( $mtasa_fp, 's' ); 
    $mtasa_packet = fread( $mtasa_fp, 16384 ); 
    fclose($mtasa_fp); 
  
    if ( substr( $mtasa_packet, 0, 4 ) == $mtasa_pre ) 
    { 
        $mtasa = array(); 
        $pos = 4; 
  
        $len =                      ord( substr( $mtasa_packet, $pos, 1 ) ) - 1; 
        $mtasa['gameShortName'] =   substr( $mtasa_packet, ++$pos, $len ); 
        $pos +=                     $len; 
  
        $len =                      ord( substr( $mtasa_packet, $pos, 1 ) ) - 1; 
        $mtasa['serverPort'] =      substr( $mtasa_packet, ++$pos, $len ); 
        $pos +=                     $len; 
  
        $len =                      ord( substr( $mtasa_packet, $pos, 1 ) ) - 1; 
        $mtasa['serverName'] =      substr( $mtasa_packet, ++$pos, $len ); 
        $pos                        += $len; 
  
        $len =                      ord( substr( $mtasa_packet, $pos, 1 ) ) - 1; 
        $mtasa['gameModeName'] =    substr( $mtasa_packet, ++$pos, $len ); 
        $pos                        += $len; 
  
        $len =                      ord( substr( $mtasa_packet, $pos, 1 ) ) - 1; 
        $mtasa['mapName'] =         substr( $mtasa_packet, ++$pos, $len ); 
     
        $MAP_NAME = $mtasa['mapName']; 
         
        // ... 
    } 
} 

Posted

MX_Master

Насколько я понял, чтобы вызвать какую-то функцию из Lua, ваш код уже не подойдет?

Posted

этот код может узнать только анонс данные сервера, и этим он хорош

ну а для для каждого дела свой инструмент (: тут речь шла про имя карты..

Posted
тут речь шла про имя карты..

Мм, моя оплошность. Вкупе с именем карты по тому примеру, который я указал в первом посте, я так же вызываю несколько lua - функций, почему как бы сразу и начал использовать mta_sdk.

Posted

Честн не знаю почему php_sdk так работает, то мест того чтобы вызывать несколько функций удалённо, лучше и намного быстрее будет создать html страницу на сервере которая будет показывать всю инфу которая тебе нужна, и отображать её на твоем сайте через аякс или айфреймы.

Do not PM me, im not going to read it anyway.

  • 2 weeks later...
Posted

to MX_Master

Можешь, пожалуйста, рассказать, как на твоем сайте реализован блок мониторинга сервера? Тоже через php_sdk или через что-то другое? Я сделал точь в точь такой же блок, как у тебя (выводит ники, пинг и проч.), но его пришлось выпилить из-за того, что вот ошибки спамит.

Posted

Я просто знаю порядок данных, составляющих UDP ответ на UDP запрос "s" серверу. Как показано выше в моем коде, идет просто сохранение этих данных и одновременный разбор последующих.

Такой код, обычно, называется MTA:SA Server Query и его можно найти в разных местах инета, допустим здесь

Posted

У меня, канеш, чуток другой вид, т.к. я сам катал свой РНР скрипт, но в целом результат один. В случае, если нужного ответа от сокета нет, можно показывать какое-то сообщение, типа "Мониторинг недоступен" или "Сервер сейчас недоступен". У меня и серв и веб серв на одной тачке стоят, поэтому этот запрос я на себя же и делаю (127.0.0.1)

  • 2 weeks later...
  • Moderators
Posted

Все понятно стало :)

Developers, Developers, Developers, Developers.... © Steve Balmer

http://www.lua.org/about.html

Quote
Please do not write it as "LUA", which is both ugly and confusing, because then it becomes an acronym with different meanings for different people. So, please, write "Lua" right!

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...