Добрый вечер всем. Я в алгоритмах php не очень силен поставил код на свой сайт, котоый мониторит сервер Код (Text): <?php if (!defined('BLOCK_FILE')) { Header("Location: ../index.php"); exit; } $server="94.251.69.129"; $port="27015"; $timeout="3"; $qw=chr(32); stream_set_timeout($fp = @fsockopen("udp://" . $server, $port, $errno, $errstr, $timeout), 1); 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)); $st=fread($fp,1); $r=socket_get_status($fp); $r=$r["unread_bytes"]; $st.=fread($fp,$r); fclose($fp); $st=substr($st,5); $address=SubStr($st,0,StrPos($st,chr(0))); $address=str_replace(chr(0),"|",$address); $st=SubStr($st,StrPos($st,chr(0))+1); $name=SubStr($st,0,StrPos($st,chr(0))); $st=SubStr($st,StrPos($st,chr(0))+1); $map=SubStr($st,0,StrPos($st,chr(0))); $st=SubStr($st,StrPos($st,chr(0))+1); $st=SubStr($st,StrPos($st,chr(0))+1); $st=SubStr($st,StrPos($st,chr(0))+1); $current=ord(SubStr($st,0,1)); $max=ord(SubStr($st,1,1)); $show_map="<img src=/hlstats/hlstatsimg/maps/valve/".$map.".jpg width=\"140\" height=\"120\">"; if (!$name) { $content = "<br><center><font class=\"content\">"; $content .= "Сервер OffLine<br>\n"; } else { $content .= (" <table width=\"100%\" border=\"0\" cellpadding=\"1\" cellspacing=\"1\" align=\"center\" bgcolor=\"#EEEEEE\"></table> <div align=center> <b><font color=red>$name</center></font></b><br><br>$show_map <br> <b><font color=\"#96121\">Карта:</font></b> <b><font color=\"#000000\">$map</font></b> <br> <b><font color=\"#96121\">Адрес:</font></b><br> <b><font color=blue>$server:$port</font></b> <br> <b><font color=\"#96121\">Игроков:</font></b> <b><font color=\"#000000\">$current/$max</font></b> <br><br> "); } ?> скрипт работает, но когда сервер выключен то помима сообщения в блоке, где отражается скрипт еще присутствует вот такая ошибка Код (Text): Warning: fread() [function.fread]: Length parameter must be greater than 0 in C:\Inetpub\www\www\blocks\block-HLstatus.php on line 17 HL:DM Status что соответсвует 17 строке и коду Код (Text): $st.=fread($fp,$r); я так думаю, какое-то условие недописано через if но как поправить не знаю :cry:
Вот это решит проблему. Код (Text): $st.=@fread($fp,$r); но это "костыль" и правильнее бы сделать по другому...
ЗАменить $st.=fread($fp,$r); на $st.=@fread($fp,$r); Переписать всё к чертям собачим, сразу грамотно...
Vladson udp может не возвратить результата и не вызвать false через fsockopen. потому там надо читать и смотреть на длину ответа
Апельсин Именно по этому я и говорю что лучше Однако если учитывать что главная проблема то добавление "собаки" эту проблему решает.