Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
2 / 2 / 1
Регистрация: 29.12.2013
Сообщений: 59
1

Протокол samp_query - он медленный и не любит русский язык

30.07.2014, 01:11. Показов 956. Ответов 1
Метки нет (Все метки)

Здравствуйте, есть протокол samp_query, но с ним возникли проблемы:
1) Он медленный
2) Он не любит русский язык

Вод код протокола:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
<?php
header('Content-Type: text/html; charset= utf-8');
class SampQueryAPI
{
    private $rSocket = false;
    private $aServer = array();
    public function __construct($sServer, $iPort = 7777)
    {
        $this->aServer[0] = $sServer;
        $this->aServer[1] = $iPort;
        $this->rSocket = @fsockopen('udp://'.$this->aServer[0], $this->aServer[1], $iError, $sError, 2);
        if(!$this->rSocket)
        {
            $this->aServer[4] = false;
            return;
        }
        socket_set_timeout($this->rSocket, 2);
        $sPacket = 'SAMP';
        $sPacket .= chr(strtok($this->aServer[0], '.'));
        $sPacket .= chr(strtok('.'));
        $sPacket .= chr(strtok('.'));
        $sPacket .= chr(strtok('.'));
        $sPacket .= chr($this->aServer[1] & 0xFF);
        $sPacket .= chr($this->aServer[1] >> 8 & 0xFF);
        $sPacket .= 'p4150';
        fwrite($this->rSocket, $sPacket);
        if(fread($this->rSocket, 15))
        {
            $this->aServer[4] = true;
        }
        else
        {
            $this->aServer[4] = false;
        }
    }
    public function __destruct()
    {
        @fclose($this->rSocket);
    }
    public function isOnline()
    {
        return isset($this->aServer[4]) ? $this->aServer[4] : false;
    }
    public function getInfo()
    {
        @fwrite($this->rSocket, $this->createPacket('i'));
        fread($this->rSocket, 11);
        $aDetails['password'] = (integer) ord(fread($this->rSocket, 1));
        $aDetails['players'] = (integer) $this->toInteger(fread($this->rSocket, 2));
        $aDetails['maxplayers'] = (integer) $this->toInteger(fread($this->rSocket, 2));
        $iStrlen = ord(fread($this->rSocket, 4));
        if(!$iStrlen) return -1;
        $aDetails['hostname'] = (string) fread($this->rSocket, $iStrlen);
        $iStrlen = ord(fread($this->rSocket, 4));
        $aDetails['gamemode'] = (string) fread($this->rSocket, $iStrlen);
        $iStrlen = ord(fread($this->rSocket, 4));
        $aDetails['mapname'] = (string) fread($this->rSocket, $iStrlen);
        return $aDetails;
    }
    
    public function getRules()
    {
        @fwrite($this->rSocket, $this->createPacket('r'));
        fread($this->rSocket, 11);
        
        $iRuleCount = ord(fread($this->rSocket, 2));
        $aReturn = array();
        
        for($iIndex = 0; $iIndex < $iRuleCount; ++$iIndex)
        {
            $iStrlen = ord(fread($this->rSocket, 1));
            $sRulename = (string) fread($this->rSocket, $iStrlen);
            
            $iStrlen = ord(fread($this->rSocket, 1));
            $aDetails[$sRulename] = (string) fread($this->rSocket, $iStrlen);
        }
        
        return $aDetails;
    }
    private function toInteger($sData)
    {
        $iInteger = 0;
        $iInteger += (ord($sData[0]));
 
        if(isset($sData[1]))
        {
            $iInteger += (ord($sData[1]) << 8);
        }
        
        if(isset($sData[2]))
        {
            $iInteger += (ord($sData[2]) << 16);
        }
        
        if(isset($sData[3]))
        {
            $iInteger += (ord($sData[3]) << 24);
        }
        
        if($iInteger >= 4294967294)
        {
            $iInteger -= 4294967296;
        }
        
        return $iInteger;
    }
    
    private function createPacket($sPayload)
    {
        $sPacket = 'SAMP';
        $sPacket .= chr(strtok($this->aServer[0], '.'));
        $sPacket .= chr(strtok('.'));
        $sPacket .= chr(strtok('.'));
        $sPacket .= chr(strtok('.'));
        $sPacket .= chr($this->aServer[1] & 0xFF);
        $sPacket .= chr($this->aServer[1] >> 8 & 0xFF);
        $sPacket .= $sPayload;
    
        return $sPacket;
    }
}
А вот код скрипта:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?
include("../maincore.php");
include("../functions/query.php");
$row=mysql_query("SELECT * FROM servers");
while($r=mysql_fetch_array($row))
{
    $query = new SampQueryAPI($r['ip'], $r['port']);// сервер + IP
    $stat = $query->getInfo();//инфа 1
    $stat2 = $query->getRules();//инфа 2
    $isonline = $query->isOnline();//инфа 2
    if($isonline=="0")
    {
    echo '<a style="color:red;">Сервер '.$r['name'].' ('.$r['ip'].':'.$r['port'].') выключен.</a><br/>';
    mysql_query("
    UPDATE `servers` SET 
    `offline` = '1' 
    WHERE `servers`.`id` = ".$r['id'].";
    ");
    }
    else
    {
    echo '<a style="color:green;">Информация о сервере '.$r['name'].' ('.$r['ip'].':'.$r['port'].') успешно обновлена.</a><br/>';
    mysql_query("
    UPDATE `servers` SET 
    `name` = '".htmlentities($stat['hostname'])."', 
    `players` = '".htmlentities($stat['players'])."', 
    `maxplayers` = '".htmlentities($stat['maxplayers'])."', 
    `map` = '".htmlentities($stat['mapname'])."', 
    `country` = '".htmlentities($stat['gamemode'])."', 
    `password` = '".htmlentities($stat['password'])."', 
    `client` = '".htmlentities($stat2['version'])."', 
    `weather` = '".htmlentities($stat2['weather'])."', 
    `offline` = '0' 
    WHERE `servers`.`id` = ".$r['id'].";
    ");
    }
}
?>
Если в $stat['hostname'] присутсвуют русские буквы, то всё просто улетает, к примеру
[..::Русский Сервер • Night Crimes™::..]->[&nbsp; ..::&ETH;&oacute;&nt]

Как мне решить проблему с русским языком? Кодировка сайта и базы - utf8
И как мне ускорить код?

Спасибо большое всем, кто откликнется)
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.07.2014, 01:11
Ответы с готовыми решениями:

Xcode , С++ и русский язык: как вывести в файл русский текст без сбитой кодировки?
Как сделать так, чтобы после некоторых манипуляций в файл выводился русский текст без сбитой...

Английский язык для окна ввода пароля, русский язык для самой системы
собственно, сабж. у меня пароль на английском языке, при включении компьютера по умолчанию стоит...

Составить программу, определяющую результат гадания на ромашке (любит — не любит)
Разминка_3 Составить программу, определяющую результат гадания на ромашке (любит — не любит), взяв...

Составить программу, определяющую результат гадания на ромашке — «любит — не любит», взяв за исходное данное количество
Составить программу, определяющую результат гадания на ромашке — «любит — не любит», взяв за...

1
2 / 2 / 1
Регистрация: 29.12.2013
Сообщений: 59
31.07.2014, 21:52  [ТС] 2
Вверх

Добавлено через 18 часов 43 минуты
Русский язык сделал Может ли кто помочь в оптимизации кода? Опрос 100 серверов происходит не менее, чем за 1 минуту, нужно приблизительно ~ 5k серверов за 10 минут
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.07.2014, 21:52

Медленный ввод в текстовые поля / медленный отклик в google chrome?
Привет! Может кто знает, Сегодня заметил, что ввод текста в браузере chrome стал очень...

русский язык
Народ а подскажите как сделать что бы В Visual C++ в консоьлных приложених распознавал русский...

Русский язык
Здравствуйте! Я практикуюсь в создании веб сайтов. Когда я писал сайт и тестировал его на локальном...

русский язык
Использую компилятор Dev C++ , при выводе результата если написать слово про русски то оно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.