PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Ну вот не работает и все.......
DbIm
Отправлено: 06 Июня, 2011 - 19:02:46
Post Id



Новичок


Покинул форум
Сообщений всего: 30
Дата рег-ции: Апр. 2011  
Откуда: Иваново


Помог: 0 раз(а)




Собственно вот что не работает, функция этого скрипта вывод информации о игроках на сайт, но скрипт твердит свое "Нет игроков или сервер не отвечает", насчет указанных ip (109.60.184.246) и порта (27015), я уверен что написал их правильно. Что может быть причиной ошибки в работе скрипта?

CODE (php):
скопировать код в буфер обмена
  1.  
  2.  
  3. $player_list = monitor_samp("109.60.184.246", 27015, samp, players);
  4.     $data = monitor_samp("109.60.184.246", 27015, samp, info);
  5.  
  6.   function monitor_samp($ip, $qport, $game, $request)
  7.   {
  8.  
  9.     $fp = @fsockopen("udp://$ip", $qport, $errno, $errstr, 1);
  10.  
  11.     if (!$fp) { return FALSE; }
  12.  
  13.     stream_set_timeout($fp, 1, 0); stream_set_blocking($fp, true);
  14.  
  15.     $ip_array   = explode(".", $ip);
  16.  
  17.     $challenge  = 'SAMP';
  18.     $challenge .= chr($ip_array[0]).chr($ip_array[1]).chr($ip_array[2]).chr($ip_array[3]);
  19.          $challenge .= chr($port      & "\xFF");
  20.          $challenge .= chr($port >> 8 & "\xFF");
  21.  
  22.          if ($request == "info")     { $challenge .= "i"; }
  23.          if ($request == "settings") { $challenge .= "r"; }
  24.          if ($request == "players")  { $challenge .= "d"; }
  25.  
  26.     fwrite($fp, $challenge);
  27.  
  28.     $buffer = fread($fp, 4096);
  29.    
  30.     fclose($fp);
  31.  
  32.     if (!trim($buffer)) { return FALSE; }
  33.  
  34.     if (!substr($buffer, 0, 4) == "SAMP") { return FALSE; }
  35.  
  36.     $buffer = substr($buffer, 11);
  37.  
  38.     if ($request == "info")
  39.     {
  40.       $data['password']   = ord(substr($buffer, 0, 1));
  41.       $data['players']    = ord(substr($buffer, 1, 2));
  42.       $data['maxplayers'] = ord(substr($buffer, 3, 2));
  43.       $buffer             =     substr($buffer, 5);    
  44.  
  45.       $data_length        = ord(substr($buffer, 0, 4));  
  46.             $data['hostname']   =     substr($buffer, 4,  $data_length);
  47.       $buffer             =     substr($buffer, 4 + $data_length);
  48.  
  49.       $data_length        = ord(substr($buffer, 0, 4));          
  50.              $data['gametype']   =     substr($buffer, 4,  $data_length);
  51.       $buffer             =     substr($buffer, 4 + $data_length);
  52.  
  53.       $data_length        = ord(substr($buffer, 0, 4));          
  54.              $data['mapname']    =     substr($buffer, 4,  $data_length);
  55.             $data['ip']              = $ip;
  56.       return $data;
  57.     }
  58.  
  59.     if ($request == "settings")
  60.     {
  61.       $setting_count = ord(substr($buffer, 0, 2));            
  62.       $buffer        =     substr($buffer, 2);                
  63.      
  64.       if ($setting_count > 128) { return FALSE; }            
  65.      
  66.            for ($i=0; $i<$setting_count; $i++)
  67.            {
  68.                if (!$buffer) { return FALSE; }                        
  69.  
  70.                $data_length  = ord(substr($buffer, 0, 1));            
  71.                $key          =     substr($buffer, 1,  $data_length);
  72.                $buffer       =     substr($buffer, 1 + $data_length);
  73.                
  74.                $data_length  = ord(substr($buffer, 0, 1));            
  75.                $value        =     substr($buffer, 1,  $data_length);
  76.               $buffer       =     substr($buffer, 1 + $data_length);
  77.  
  78.                $setting[$key] = $value;
  79.              }
  80.              
  81.              return $setting;
  82.          }
  83.  
  84.     if ($request == "players")
  85.     {
  86.       $player_count = ord(substr($buffer, 0, 2));                          
  87.       $buffer       = substr($buffer, 2);                                  
  88.  
  89.       if ($player_count > 128) { return FALSE; }                          
  90.  
  91.            for ($i=1; $i<=$player_count; $i++)
  92.            {
  93.                if (!$buffer) { return FALSE; }                                  
  94.  
  95.                $player[$i]['pid']          = ord(substr($buffer, 0, 1));          
  96.                $buffer                     =     substr($buffer, 1);              
  97.  
  98.                $data_length                = ord(substr($buffer, 0, 1));          
  99.                $player[$i]['name']         =     substr($buffer, 1,  $data_length);
  100.                $buffer                     =     substr($buffer, 1 + $data_length);
  101.  
  102.         list(,$player[$i]['score']) = unpack("s", substr($buffer, 0, 4));    
  103.                $buffer                     =             substr($buffer, 4);    
  104.  
  105.                $player[$i]['ping']         = ord(substr($buffer, 0, 4));        
  106.                $buffer                     =     substr($buffer, 4);            
  107.              }
  108.  
  109.              return $player;
  110.     }
  111.  
  112.   }
  113.   if (!$player_list) { echo "<div style='text-align:center'>Нет игроков или сервер не отвечает</div></body></html>"; return; }
  114.  
  115.   if (isset($player_list[1]['score']))   { $monitor_show_score  = 1; }
  116.   if (isset($player_list[1]['ping']))    { $monitor_show_ping   = 1; }
  117.  
  118.  
  119.   echo "<center>
  120.          <u>".$data[hostname]."</u><br>
  121.        ".$data[gametype]."
  122.          </center>";
  123.  
  124.  
  125.   echo "<center><table class='players_table' cellpadding='3'>
  126.        <tr>
  127.        <td style='text-align:center'><b>Имя Игрока</b><br /><br /></td>
  128.        <td style='height:30px'><br /><br /></td></center>";
  129.  
  130.   if ($monitor_show_score ) { echo "<td style='width:60px; text-align:center'><b>Левел    </b><br /><br /></td>"; }
  131.   if ($monitor_show_ping)   { echo "<td style='width:60px; text-align:center'><b>Пинг     </b><br /><br /></td>"; }
  132.  
  133.   echo "</tr>";
  134.  
  135.   foreach ($player_list as $key=>$player)
  136.   {
  137.     if (function_exists("mb_convert_encoding"))
  138.     {
  139.       $player[name] = htmlspecialchars($player[name], ENT_QUOTES);
  140.       $player[name] = @mb_convert_encoding($player[name],"HTML-ENTITIES","auto");
  141.     }
  142.     else
  143.     {
  144.       $player[name] = htmlentities($player[name], ENT_QUOTES);
  145.     }
  146.  
  147.     echo "<tr><td class='players_row'> $player[name] </td><td class='players_spacer'><br /></td>";
  148.  
  149.     if ($monitor_show_score)  { echo "<td class='players_row'> $player[score]  </td>"; }
  150.     if ($monitor_show_ping)   { echo "<td class='players_row'> $player[ping]   </td>"; }
  151.  
  152.     echo "</tr>\r\n";
  153.   }
  154.  
  155.   echo "</table><div style='height:30px'><br /></div>";
  156.  
  157.  


Скрипт проверен и должен работать........ Но у меня не работает
OS Linux
Помогите люди добрые............
 
 Top
OrmaJever Модератор
Отправлено: 06 Июня, 2011 - 21:21:47
Post Id



Активный участник


Покинул форум
Сообщений всего: 7541
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Условие не выполняется здесь
PHP:
скопировать код в буфер обмена
  1. if (!$player_list) { echo "<div style='text-align:center'>Нет игроков или сервер не отвечает</div></body></html>"; return; }

Эта переменая устанавливается тут
PHP:
скопировать код в буфер обмена
  1. $player_list = monitor_samp("109.60.184.246", 27015, samp, players);

ну а значение false ей придается вот эта строка
PHP:
скопировать код в буфер обмена
  1. function monitor_samp($ip, $qport, $game, $request)
  2. {
  3.     $fp = @fsockopen("udp://$ip", $qport, $errno, $errstr, 1);
  4.     if (!$fp) { return FALSE; } // она самая

В функции нужно вывести $errno и $errstr и посмотреть текст ошибки

(Отредактировано автором: 06 Июня, 2011 - 21:22:12)



-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
DbIm
Отправлено: 06 Июня, 2011 - 22:33:49
Post Id



Новичок


Покинул форум
Сообщений всего: 30
Дата рег-ции: Апр. 2011  
Откуда: Иваново


Помог: 0 раз(а)




Т.е.
CODE (php):
скопировать код в буфер обмена
  1.  
  2.  function monitor_samp($ip, $qport, $game, $request)
  3.   {
  4.  
  5.     $fp = @fsockopen("udp://$ip", $qport, $errno, $errstr, 10);
  6.  
  7.     if(!$fp)die("$errstr($errno)");
  8. }
  9.  

Если да то ошибок нет, если не так я что-то не догнал........ Если можно, то как нить ещё проще.......
 
 Top
DbIm
Отправлено: 08 Июня, 2011 - 13:14:08
Post Id



Новичок


Покинул форум
Сообщений всего: 30
Дата рег-ции: Апр. 2011  
Откуда: Иваново


Помог: 0 раз(а)




Что все никто ничего не знает?
 
 Top
OrmaJever Модератор
Отправлено: 08 Июня, 2011 - 13:31:51
Post Id



Активный участник


Покинул форум
Сообщений всего: 7541
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




А ну тогда варинат что false возвращает другая строка
32, 34, 64, 68, 89, 93
Нужно выяснить какая имено строка возвращает false (http://phpfaq[dot]ru/debug )
и затем понять почему условие не выполняется


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
DbIm
Отправлено: 08 Июня, 2011 - 14:05:11
Post Id



Новичок


Покинул форум
Сообщений всего: 30
Дата рег-ции: Апр. 2011  
Откуда: Иваново


Помог: 0 раз(а)




Блинаааа как все нудно)
(Добавление)
Собственно нашел новый скрипт............ который проше и больше подходит.
CODE (php):
скопировать код в буфер обмена
  1. ini_set('display_errors',1);
  2. include_once "./include/head.php";
  3.  
  4.   $player_list = monitor_server_cs_full("109.60.184.246", 27015, halflife, players);
  5.  
  6.  
  7.  
  8. //------------------////////////////----------------------------------------------------
  9.  
  10.   function monitor_server_cs_full($ip, $port, $game, $request)
  11.  
  12.     {
  13.  
  14.         $fp = @fsockopen("udp://$ip", $port, $errno, $errstr, 1);
  15.  
  16.         if (!$fp) { return FALSE; }
  17.  
  18.         stream_set_timeout($fp, 1, 0);
  19.  
  20.         stream_set_blocking($fp, true);  
  21.  
  22.         if (($request == "settings" || $request == "players"))
  23.  
  24.         {
  25.  
  26.         $challenge_code = "\xFF\xFF\xFF\xFF\x57";
  27.  
  28.         fwrite($fp, $challenge_code);
  29.  
  30.         $buffer = fread($fp, 4096);
  31.  
  32.         if (!trim($buffer)) { fclose($fp); return FALSE; }
  33.  
  34.         $challenge_code = substr($buffer, 5, 4);
  35.  
  36.     }
  37.  
  38.         if ($request == "info")     { $challenge = "\xFF\xFF\xFF\xFFTSource Engine Query\x00"; }
  39.  
  40.         if ($request == "players")  { $challenge = "\xFF\xFF\xFF\xFFU".$challenge_code;        }
  41.  
  42.         if ($request == "settings") { $challenge = "\xFF\xFF\xFF\xFFV".$challenge_code;        }
  43.  
  44.         fwrite($fp, $challenge);
  45.  
  46.         $buffer = fread($fp, 4096);
  47.  
  48.         if (!$buffer) { fclose($fp); return FALSE; }      
  49.  
  50.         if ($request == "settings")
  51.  
  52.         {
  53.  
  54.         $second_packet = fread($fp, 4096);
  55.  
  56.         if (strlen($second_packet) > 0)
  57.  
  58.         {
  59.  
  60.         $reverse_check = dechex(ord($buffer[8]));    
  61.  
  62.         if ($reverse_check[0] == "1")
  63.  
  64.         {
  65.  
  66.         $tmp           = $buffer;                
  67.  
  68.         $buffer        = $second_packet;
  69.  
  70.         $second_packet = $tmp;
  71.  
  72.         }
  73.  
  74.         $buffer        = substr($buffer, 13);        
  75.  
  76.         $second_packet = substr($second_packet, 9);  
  77.  
  78.         $buffer        = trim($buffer.$second_packet);
  79.  
  80.         }
  81.  
  82.         else
  83.  
  84.         {
  85.  
  86.         $buffer = trim(substr($buffer, 4));
  87.  
  88.         }
  89.  
  90.         }
  91.  
  92.         else
  93.  
  94.         {
  95.  
  96.         $buffer = trim(substr($buffer, 4));
  97.  
  98.         }
  99.  
  100.         fclose($fp);
  101.  
  102.         if (!trim($buffer)) { return FALSE; }
  103.  
  104.         //---------------------------------------------------------+
  105.  
  106.         if ($request == "info")
  107.  
  108.         {
  109.  
  110.         unset($data);
  111.  
  112.         $tmp = explode("\x00", $buffer);
  113.  
  114.                  $place = strlen($tmp[0].$tmp[1].$tmp[2].$tmp[3].$tmp[4]) + 5;
  115.  
  116.                     $data['mapname']        = $tmp[1];                                  //name map in server now
  117.  
  118.                     $data['gamemod']        = $tmp[2];                                  //name modification Half Life
  119.  
  120.                         $data['Ngamemod']       = $tmp[3];                                      //name server
  121.  
  122.                     $data['players']     = ord($buffer[$place + 1]);
  123.  
  124.                         $data['maxplayers']  = ord($buffer[$place + 2]);
  125.  
  126.                     $data['numbots']       = ord($buffer[$place + 3]);  // BOTS
  127.  
  128.                         $data['ip'] = $ip;
  129.  
  130.                     $data['server_os']      = $buffer[$place + 5];      // W indows or L inux
  131.  
  132.                  return $data;  
  133.  
  134.                 }
  135.  
  136.         //---------------------------------------------------------+
  137.  
  138.         if ($request == "players")
  139.  
  140.         {
  141.  
  142.         $player_number = 0;
  143.  
  144.         $position = 2;                                              
  145.  
  146.         do
  147.  
  148.         {
  149.  
  150.         $player_number++;                                        
  151.  
  152.         $player[$player_number]['id'] = ord($buffer[$position]);
  153.  
  154.         $position ++;                                            
  155.  
  156.         while($buffer[$position] != "\x00" && $position < 4000)  
  157.  
  158.         {
  159.  
  160.         $player[$player_number]['name'] .= $buffer[$position];  
  161.  
  162.         $position ++;
  163.  
  164.         }
  165.  
  166.         $player[$player_number]['score'] = (ord($buffer[$position + 1]))
  167.  
  168.         + (ord($buffer[$position + 2]) * 256)
  169.  
  170.         + (ord($buffer[$position + 3]) * 65536)
  171.  
  172.         + (ord($buffer[$position + 4]) * 16777216);
  173.  
  174.         if ($player[$player_number]['score'] > 2147483648) { $player[$player_number]['score'] -= 4294967296; }  
  175.  
  176.         $time = substr($buffer, $position + 5, 4);                
  177.  
  178.         if (strlen($time) < 4) { return FALSE; }                  
  179.  
  180.         list(,$time) = unpack("f", $time);                      
  181.  
  182.         $time = mktime(0, 0, $time);                              
  183.  
  184.         $player[$player_number]['time'] = date("H:i:s", $time);  
  185.  
  186.         $position += 9;
  187.  
  188.         }
  189.  
  190.         while ($position < strlen($buffer));                        
  191.  
  192.         return $player;
  193.  
  194.         }
  195.  
  196.         //---------------------------------------------------------+
  197.  
  198.         if ($request == "settings")
  199.  
  200.         {
  201.  
  202.         $tmp     = substr($buffer, 2);
  203.  
  204.         $rawdata = explode("\x00", $tmp);
  205.  
  206.         for($i=1; $i<count($rawdata); $i=$i+2)
  207.  
  208.         {
  209.  
  210.         $rawdata[$i] = strtolower($rawdata[$i]);  
  211.  
  212.         $setting[$rawdata[$i]] = $rawdata[$i+1];  
  213.  
  214.         }
  215.  
  216.         return $setting;  
  217.  
  218.         }
  219.  
  220.  }
  221.  
  222. //------------------////////////////----------------------------------------------------  
  223.  
  224.   if (!$player_list) { echo "<div style='text-align:center'>Нет игроков или сервер не отвечает</div></body></html>"; return; }
  225.  
  226.  
  227.  
  228.   if (isset($player_list[1][score]) )  { $monitor_show_score  = 1; }
  229.  
  230.   if (isset($player_list[1][time])  )  { $monitor_show_time   = 1; }
  231.  
  232.  
  233.  
  234.   echo " <table class='gborder' cellpadding='1' border=1>
  235.  
  236.        <tr>
  237.  
  238.        <td width=50% align=center class='gborder'><b>Ник</b><br /></td>
  239.  
  240.        <td style='height:30px'><br /><br /></td>";
  241.  
  242.  
  243.  
  244.   if ($monitor_show_score ) { echo "<td width=20% align=center class='gborder'><b>Фраги    </b><br /></td>"; }
  245.  
  246.   if ($monitor_show_time)   { echo "<td width=30% align=center class='gborder'><b>Время в игре     </b><br /></td>"; }
  247.  
  248.  
  249.  
  250.   echo "</tr>";
  251.  
  252.   foreach ($player_list as $key=>$player)
  253.  
  254.   {
  255.  
  256.     if (function_exists("mb_convert_encoding"))
  257.  
  258.     {
  259.  
  260.       $player[name] = htmlspecialchars($player[name], ENT_QUOTES);
  261.  
  262.       $player[name] = @mb_convert_encoding($player[name],"HTML-ENTITIES","auto");
  263.  
  264.     }
  265.  
  266.     else
  267.  
  268.     {
  269.  
  270.       $player[name] = htmlentities($player[name], ENT_QUOTES);
  271.  
  272.     }
  273.  
  274.     echo "<tr><td width=50% align=center class='gborder'> $player[name] </td><td class='players_spacer'><br /></td>";
  275.  
  276.     if ($monitor_show_score)  { echo "<td width=20% align=center class='gborder'> $player[score]  </td>"; }
  277.  
  278.     if ($monitor_show_time)   { echo "<td width=30% align=center class='gborder'> $player[time]   </td>"; }
  279.  
  280.     echo "</tr>\r\n";
  281.  
  282.   }

И ошибка возникает только в одном месте линия 5:
Use of undefined constant players - assumed 'players'
Use of undefined constant players - assumed 'info'
Если их поставить в ковычки все норм, никаких ошибок, но мониторинг не работает........

(Отредактировано автором: 08 Июня, 2011 - 14:21:24)

 
 Top
OrmaJever Модератор
Отправлено: 08 Июня, 2011 - 16:12:12
Post Id



Активный участник


Покинул форум
Сообщений всего: 7541
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




DbIm пишет:
$player_list = monitor_server_cs_full("109.60.184.246", 27015, halflife, players);

использование неизвесной константы


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
DbIm
Отправлено: 08 Июня, 2011 - 16:18:51
Post Id



Новичок


Покинул форум
Сообщений всего: 30
Дата рег-ции: Апр. 2011  
Откуда: Иваново


Помог: 0 раз(а)




Я в курсе......... Но не знаю где эту константу взять........
 
 Top
OrmaJever Модератор
Отправлено: 08 Июня, 2011 - 16:36:58
Post Id



Активный участник


Покинул форум
Сообщений всего: 7541
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




ну я cs сервер не поднимал и тоже не знаю что должно быть в этих константах Растерялся


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
DbIm
Отправлено: 08 Июня, 2011 - 16:40:56
Post Id



Новичок


Покинул форум
Сообщений всего: 30
Дата рег-ции: Апр. 2011  
Откуда: Иваново


Помог: 0 раз(а)




А кое что я понял) Эти константы так и должны быть, все должно работать без них ошибка не там..........Мониторинг когда я в .htaccess указал php_flag display_errors 1, тоже выдал мне ошибку о константе hostname, но hostname прекрассно отображается в мониторинге............... Отладку сделать не смогу........... Вариантов решения проблемы больше не существует?
 
 Top
OrmaJever Модератор
Отправлено: 08 Июня, 2011 - 16:53:59
Post Id



Активный участник


Покинул форум
Сообщений всего: 7541
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




DbIm пишет:
Вариантов решения проблемы больше не существует?

Может и существуют но я говорю по существу
PHP:
скопировать код в буфер обмена
  1. function monitor_server_cs_full($ip, $port, $game, $request) {


3 и 4 параметры не имеют стандартного значения и должны быть указаны всегда, а вот что в них должно быть не знаю (надо код разбирать и смотреть).
DbIm пишет:
все должно работать без них

Попробуйте передать просто пустую строку '', может прокатит Подмигивание

(Отредактировано автором: 08 Июня, 2011 - 16:55:02)



-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
DbIm
Отправлено: 08 Июня, 2011 - 17:02:04
Post Id



Новичок


Покинул форум
Сообщений всего: 30
Дата рег-ции: Апр. 2011  
Откуда: Иваново


Помог: 0 раз(а)




Извините, я этого не говорил, но может быть ошибка в том что этот скрипт для CSM DLE? Хотя я подумал разницы быть не должно..... Но все же.......
Передать '' тоже не прокатило Голливудская улыбка
(Добавление)
Попробовал на CSM DLE, тоже не работает...........

(Отредактировано автором: 08 Июня, 2011 - 18:14:07)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Если скрипт не работает »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB