• Страница 1 из 1
  • 1
Архив - только для чтения
Модератор форума: andycrowz  
статус сервера
kleuser
Командир
Прошу помощи, подскажите как сделать, что бы скрипт показывал 0 человек в сети если сервер выключен. Сейчас он показывает сколько было в сети на момент выключения сервера хД.
Код
<?php
$characters = mysql_connect("$host:$port", "$login", "$pass", True);
mysql_selectdb("$dbc", $characters);
$sql = mysql_query("SELECT count(`guid`) FROM `characters` WHERE `online` = 1;", $characters);
$online = "".mysql_result($sql, 0, 0)."";
$allianceonline = mysql_query ("select count(*) from characters where online = 1 and race in (1,3,4,7,11)");
$allianceonline = mysql_result ($allianceonline,0);
$hordeonline = mysql_query ("select count(*) from characters where online = 1 and race in (2,5,6,8,10)");
$hordeonline = mysql_result ($hordeonline,0);
$fp = @fsockopen("$host", $gameport, $errno, $errstr, 1);  
if($fp >= 1){
     $gamen = 'ONLINE';
} else {
     $gamen = 'OFFLINE';
}
mysql_selectdb ("$rdb");
$we = mysql_query ("select count(*) from account");
$we = mysql_result ($we,0);
?>


P.S не знаю куда написать. если что не ругайтесь.
Сообщение # 1 написано 18.01.2014 в 09:42
Malezha
Армия спасения
Ужасно старый и кривой скрипт, вообще никакой оптимизации, будет ддос - этот скрипт будет нагружать и веб часть и сам сервер своими постоянно открытыми сокетами.
Если по вопросу:
Код
<?php
$characters = mysql_connect("$host:$port", "$login", "$pass", True); // драйвер mysql морально устарел, юзай mysqli или pdo
mysql_selectdb("$dbc", $characters);
$sql = mysql_query("SELECT count(`guid`) FROM `characters` WHERE `online` = 1;", $characters);
$online = "".mysql_result($sql, 0, 0)."";
$allianceonline = mysql_query ("select count(*) from characters where online = 1 and race in (1,3,4,7,11)");
$allianceonline = mysql_result ($allianceonline,0);
$hordeonline = $online - $allianceonline; // был еще один лишний запрос в базу
$fp = @fsockopen("$host", $gameport, $errno, $errstr, 1);  // вообще дикая строка, никогда такое не делай на продакшене
if($fp >= 1){
      $gamen = 'ONLINE';
} else {
      $gamen = 'OFFLINE';
      $online = 0;
      $allianceonline = 0;
      $hordeonline = 0;
}
mysql_selectdb ("$rdb");
$we = mysql_query ("select count(*) from account");
$we = mysql_result ($we,0);
?>

Вообще, по оптимизации отправляйся ко мне в пм.
Сообщение # 2 отредактировано Malezha - Суббота, 18.01.2014, 11:10
kleuser
Командир
ап, актуально

Добавлено (19.01.2014, 07:52)
---------------------------------------------
есть скрипт поменьше
Немного пытался допилить так и не вышло
Код
   

<?
$link = mysqli_connect("$host", "$login", "$pass")
         or die("Could not connect: " . mysqli_error($link));
mysqli_select_db($link, "$dbc") or die('Выбрана неверная база данных');
  if (mysqli_query($link, "SET NAMES $database_encoding") === TRUE);

$resnumall_characters = mysqli_query($link, "SELECT * FROM characters WHERE online=1 ");
echo mysqli_num_rows($resnumall_characters);
while($row_cnt = (mysqli_fetch_array($resnumall_characters)));   

?>


он тоже не сбрасывает на 0 если сервер выключить и там будут игроки. хелп

Добавлено (19.01.2014, 14:56)
---------------------------------------------
ребята хелпайте плз

Сообщение # 3 отредактировано kleuser - Воскресенье, 19.01.2014, 08:43
Vicher
Admin
Код
<?php
$characters = mysql_connect("$host:$port", "$login", "$pass", True);
$fp = @fsockopen("$host", $gameport, $errno, $errstr, 1);
if($fp >= 1){
      $gamen = 'ONLINE';
      mysql_selectdb("$dbc", $characters);
      $sql = mysql_query("SELECT count(`guid`) FROM `characters` WHERE `online` = 1;", $characters);
      $online = "".mysql_result($sql, 0, 0)."";
      $allianceonline = mysql_query ("select count(*) from characters where online = 1 and race in (1,3,4,7,11)");
      $allianceonline = mysql_result ($allianceonline,0);
      $hordeonline = mysql_query ("select count(*) from characters where online = 1 and race in (2,5,6,8,10)");
      $hordeonline = mysql_result ($hordeonline,0);
} else {
      $gamen = 'OFFLINE';
      $online = $allianceonline = $hordeonline = 0;
}
mysql_selectdb ("$rdb");
$we = mysql_query ("select count(*) from account");
$we = mysql_result ($we,0);
?>
Сообщение # 4 отредактировано Vicher - Четверг, 23.01.2014, 01:59
kleuser
Командир
Vicher, Спасибо конечно, что уделили минутку внимания, но мне по второму скрипту из 3 поста нужно сделать, он мне больше нравиться biggrin не поможете ?
Сообщение # 5 отредактировано kleuser - Четверг, 23.01.2014, 04:34
Vicher
Admin
Ну, вообще, второй скрипт, похоже, более фиговый, чем первый. И я там не увидел проверки на доступность сервера. Только количество онлайн.
Цитата kleuser ()
SELECT * FROM characters WHERE online=1
crazy

Цитата kleuser ()
mysqli_num_rows($resnumall_characters);

Собстно это и есть получение онлайн игроков. Только там оно выводит его, а не присваивает переменной.

Цитата kleuser ()
while($row_cnt = (mysqli_fetch_array($resnumall_characters)));   

Что за фигня происходит тут - известно только автору данного скрипта. До меня так и не дошло, в чем же смысл получать данные, но не использовать.
Сообщение # 6 отредактировано Vicher - Четверг, 23.01.2014, 11:07
kleuser
Командир
Так как сделать правильно? я вообще не соображаю smile
Скрипт этот брал из рипа ScreeaM как-то так его ник)

Добавлено (23.01.2014, 11:41)
---------------------------------------------
Мне вобщем нужен просто скрипт который по человечески выводил общее кол-во человек в онлайне, и что- бы показывал 0 если сервер будет оффлайн.

Добавлено (23.01.2014, 12:00)
---------------------------------------------
Не знаю правильно ли, но работает happy
Код
<?
$link = mysqli_connect("$host", "$login", "$pass")
           or die("Could not connect: " . mysqli_error($link));
mysqli_select_db($link, "$dbc") or die('Выбрана неверная база данных');
    if (mysqli_query($link, "SET NAMES $database_encoding") === TRUE);
$fp = @fsockopen("$host", $gameport, $errno, $errstr, 1);
if($fp >= 1){

$resnumall_characters = mysqli_query($link, "SELECT `online` FROM `characters` WHERE `online`='1'");
echo mysqli_num_rows($resnumall_characters);
} else {

echo($resnumall_characters = 0);
}
mysqli_close($link);
?>
Сообщение # 7 отредактировано kleuser - Четверг, 23.01.2014, 12:01
Vicher
Admin
Ну, в таком случае лучше так:
Код
<?  
$fp = @fsockopen("$host", $gameport, $errno, $errstr, 1);  
if($fp >= 1){  
     $link = mysqli_connect("$host", "$login", "$pass") or die("Could not connect: " . mysqli_error($link));  
     mysqli_select_db($link, "$dbc") or die('Выбрана неверная база данных');
     $q = mysqli_query($link, "SELECT COUNT(*) FROM `characters` WHERE `online`='1'");
     echo ($q === FALSE ? mysqli_error($link) : mysqli_fetch_row($q)[0]);  
} else {  
     echo "0";
}  
mysqli_close($link);  
?>
Сообщение # 8 написано 23.01.2014 в 12:56
kleuser
Командир
Parse error: syntax error, unexpected '['
на строчке
echo ($q === FALSE ? mysqli_error($link) : mysqli_fetch_row($q)[0]);
Сообщение # 9 написано 23.01.2014 в 13:01
Vicher
Admin
Старая версия php или что-то с конфигурацией. У меня такое было, когда я перенес сайт на хостинг.
Тогда так:
Код
<?    
$fp = @fsockopen("$host", $gameport, $errno, $errstr, 1);    
if($fp >= 1){    
       $link = mysqli_connect("$host", "$login", "$pass") or die("Could not connect: " . mysqli_error($link));    
       mysqli_select_db($link, "$dbc") or die('Выбрана неверная база данных');
       $q = mysqli_query($link, "SELECT COUNT(*) FROM `characters` WHERE `online`='1'");
       if($q === FALSE)
            echo mysqli_error($link);
       else
       {
             $r = mysqli_fetch_row($q);
             echo $r[0];
       }
} else {    
       echo "0";
}    
mysqli_close($link);    
?>
Сообщение # 10 отредактировано Vicher - Четверг, 23.01.2014, 13:09
kleuser
Командир
php 5.3
теперь ему не нравится mysqli_close($link);

Warning: mysqli_close() expects parameter 1 to be mysqli, null given

что за ерунда о_О
Сообщение # 11 отредактировано kleuser - Четверг, 23.01.2014, 13:14
Vicher
Admin
Забыл перенести это в блок if.
Можно это убрать. Пхп сам закроет соединение, когда скрипт выполнится.
Сообщение # 12 отредактировано Vicher - Четверг, 23.01.2014, 13:18
kleuser
Командир
спасибо тебе большое за помощь, вроде работает нормально)

Вопрос закрыт
Сообщение # 13 написано 23.01.2014 в 13:20
Dimitro
Praise the sun!
Данная тема была перемещена из раздела [TrinityCore] Help.
Причина перемещения: Причина не указана

Переместил: Dimitro.
Arcanum Core © Dev.
Для запросов на выдачу наград/снятие замечаний есть темы в Работе Портала. Не пишите по этому поводу в личку.
Сообщение # 14 написано 23.01.2014 в 14:36
  • Страница 1 из 1
  • 1
Поиск: