Перейти к содержанию
Авторизация  
OverOne1

Как определить онлайн на сервере?

Рекомендуемые сообщения

Как определить онлайн на сервере? Использую

$query = mysql_fetch_assoc(mysql_query('SELECT `online` FROM `characters`'));
echo 'Онлайн: '.$query['online'].'';

не работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 "SELECT COUNT(*) FROM `characters` WHERE `online`>0",

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 "SELECT COUNT(*) FROM `characters` WHERE `online`>0",

Не помогло((

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вобще-то есть пакет специальный, котроый можно считать с порта геймсерва и в нем будет вся инфа о текущем онлайне.

 

пример функции на php для получения инфы

}
//
// Проверка статуса серверов и т.п.
//
function get_status($ip, $port, &$info, $status_refresh_time = 5)
{
	global $data_dir;
	$info = array();
	$data_file = "scripts/cache/{$ip}-{$port}.status";

	if (!file_exists($data_file))
	{
		$fh = fopen($data_file, "w+");

		if ($port > 7000)
		{
			fputs($fh, "time:online:world:max:current:playing:store:unk0:unk1:unk2:unk3:unk4:unk5:unk6:unk7:unk8:unk9:unk10:unk11\n");
			fputs($fh, "0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0\n");
		}
		else
		{
			fputs($fh, "time:online\n");
			fputs($fh, "0:0\n");
		}

		fclose($fh);
	}

	$fh = fopen($data_file, "r");
	$str = trim(fgets($fh));
	$keys = explode(":", $str);
	$str = trim(fgets($fh));
	$values= explode(":", $str);
	fclose($fh);
	$info = array_combine($keys, $values);
	unset($keys, $values);

	if (($info["time"] + $status_refresh_time) < time())
	{
		if ($fp = @fsockopen($ip, $port, $ERROR_NO, $ERROR_STR, (float) 0.5))
		{
			if ($port > 7000)
			{
				$packet = pack("vCi", 6, 0, -3);
				fwrite($fp, $packet);
				$returned = fread($fp, 73);
				$info = unpack("vtime/Conline/iworld/imax/icurrent/iplaying/istore/iunk0/iunk1/iunk2/iunk3/iunk4/iunk5/iunk6/iunk7/iunk8/iunk9/iunk10/iunk11", $returned);
			}

			fclose($fp);
			$info["online"] = 1;
		}
		else
		{
			$info["online"] = 0;
			$info["current"] = 0;
			$info["store"] = 0;
		}

		$info["time"] = time();
		$fh = fopen($data_file, "w+");
		fputs($fh, implode(":", array_keys($info))."\n");
		fputs($fh, implode(":", array_values($info))."\n");
		fclose($fh);
	}
	return $info["online"];
}
Изменено пользователем Gaikotsu
  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Без пакетов, с бд.

        $conn = new mysqli($config['host'], $config['user'], $config['password'], $config['db']);
        $query = "SELECT  count(0) FROM `characters` WHERE `online`!=0";
        $result = $conn->query($query);
        if (!$result) {
            echo  "Error";
        }
        $rows = $result->fetch_assoc();        
        echo $rows['count(0)'];

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ты еще скажи вручную про всем локациям побегать и народ посчитать

  • Upvote 3

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не помогло((

"SELECT COUNT(*) FROM `characters` WHERE `online`>0" 

 как это не помогло ? это что за чудо сборка у тебя ?)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

потому что, скорее всего он скопировал запрос в том виде, который ему скинули  -  "SELECT COUNT(*) FROM `characters` WHERE `online`>0",

вот так пробуй - SELECT COUNT(*) FROM `characters` WHERE `online`>0;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

потому что, скорее всего он скопировал запрос в том виде, который ему скинули  -  "SELECT COUNT(*) FROM `characters` WHERE `online`>0",

вот так пробуй - SELECT COUNT(*) FROM `characters` WHERE `online`>0;

В запросах не нужно ставь точку с запятой в конце ( в пхп).

Скорей всего он не поправил строку

echo 'Онлайн: '.$query['online'].'';

Нужно было 

echo 'Онлайн: '.$query['count(0)'].'';

Изменено пользователем zGrandy

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в админке посчитать в разделе game/list

Есть куда проще способ - зайти в раздел game/shutdown, и там пишет какой онлайн на данный момент.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...