За последние 24 часа нас посетили 17517 программистов и 1727 роботов. Сейчас ищут 926 программистов ...

Скрипт мониторинга сервера Half-life1 чуть-чуть поправить

Тема в разделе "PHP для новичков", создана пользователем Extremist, 17 окт 2010.

  1. Extremist

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

    С нами с:
    18 авг 2009
    Сообщения:
    52
    Симпатии:
    0
    Адрес:
    Новосибирск
    Добрый вечер всем. Я в алгоритмах php не очень силен
    поставил код на свой сайт, котоый мониторит сервер
    Код (Text):
    1.  
    2. <?php
    3.  
    4. if (!defined('BLOCK_FILE')) {
    5.     Header("Location: ../index.php");
    6.     exit;
    7. }
    8.  
    9. $server="94.251.69.129";
    10. $port="27015";
    11. $timeout="3";
    12. $qw=chr(32);
    13. stream_set_timeout($fp = @fsockopen("udp://" . $server, $port, $errno, $errstr, $timeout), 1);
    14. fwrite($fp,"\xFF\xFF\xFF\xFF\x54\x53\x6F\x75\x72\x63\x65\x20\x45\x6E\x67\x69\x6E\x65\x20\x51\x75\x65\x72\x79\x00".chr(10));
    15.     $st=fread($fp,1);
    16.     $r=socket_get_status($fp);
    17.     $r=$r["unread_bytes"];
    18.     $st.=fread($fp,$r);
    19.     fclose($fp);
    20.     $st=substr($st,5);
    21.     $address=SubStr($st,0,StrPos($st,chr(0)));
    22.     $address=str_replace(chr(0),"|",$address);
    23.     $st=SubStr($st,StrPos($st,chr(0))+1);
    24.     $name=SubStr($st,0,StrPos($st,chr(0)));
    25.     $st=SubStr($st,StrPos($st,chr(0))+1);
    26.     $map=SubStr($st,0,StrPos($st,chr(0)));
    27.     $st=SubStr($st,StrPos($st,chr(0))+1);
    28.     $st=SubStr($st,StrPos($st,chr(0))+1);
    29.     $st=SubStr($st,StrPos($st,chr(0))+1);
    30.     $current=ord(SubStr($st,0,1));
    31.     $max=ord(SubStr($st,1,1));
    32.     $show_map="<img src=/hlstats/hlstatsimg/maps/valve/".$map.".jpg width=\"140\" height=\"120\">";
    33.  
    34.  
    35. if (!$name) {
    36.     $content  = "<br><center><font class=\"content\">";
    37.     $content .=  "Сервер OffLine<br>\n";
    38. } else {    
    39.    
    40.     $content .= ("
    41.         <table width=\"100%\" border=\"0\" cellpadding=\"1\" cellspacing=\"1\" align=\"center\" bgcolor=\"#EEEEEE\"></table>
    42.         <div align=center>
    43.         <b><font color=red>$name</center></font></b><br><br>$show_map
    44.         <br>
    45.         <b><font color=\"#96121\">Карта:</font></b>
    46.         <b><font color=\"#000000\">$map</font></b>
    47.         <br>
    48.         <b><font color=\"#96121\">Адрес:</font></b><br>
    49.         <b><font color=blue>$server:$port</font></b>
    50.         <br>
    51.         <b><font color=\"#96121\">Игроков:</font></b>
    52.         <b><font color=\"#000000\">$current/$max</font></b>
    53.         <br><br>
    54.     ");
    55. }
    56.  
    57. ?>
    скрипт работает, но когда сервер выключен
    то помима сообщения в блоке, где отражается скрипт
    еще присутствует вот такая ошибка
    Код (Text):
    1.  
    2. Warning: fread() [function.fread]: Length parameter must be greater than 0 in C:\Inetpub\www\www\blocks\block-HLstatus.php on line 17
    3. HL:DM Status
    что соответсвует 17 строке и коду
    Код (Text):
    1.  
    2.     $st.=fread($fp,$r);

    я так думаю, какое-то условие недописано через if но как поправить не знаю :cry:
     
  2. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Вот это решит проблему.
    Код (Text):
    1. $st.=@fread($fp,$r);
    но это "костыль" и правильнее бы сделать по другому...
     
  3. Extremist

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

    С нами с:
    18 авг 2009
    Сообщения:
    52
    Симпатии:
    0
    Адрес:
    Новосибирск
    я не совсем понял что с ним сделать? вообще убрать?
    а по-другому это как?
     
  4. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    ЗАменить
    $st.=fread($fp,$r);
    на
    $st.=@fread($fp,$r);

    Переписать всё к чертям собачим, сразу грамотно...
     
  5. Апельсин

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

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    Vladson
    udp может не возвратить результата и не вызвать false через fsockopen. потому там надо читать и смотреть на длину ответа
     
  6. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Апельсин
    Именно по этому я и говорю что лучше
    Однако если учитывать что главная проблема
    то добавление "собаки" эту проблему решает.