Здраствуйте! Я тут научися немного рпограмировать на php, разобрался с базами и тд... Но тепер ьвопрос, сам уже много чего перепробывал, и не вышло, как сделать в UDP timeout? Вот чтобы если неконектилось с сервером писало сервер недоступен... Вся проблемма в том что: $fp = fsockopen('udp://' . $ip_0, $port_0); Тут таймаут не поддерживается. $ip_0 = 193.138.147.23 а $port_0 = 8000 вот так как сделать чтобы оно если не конектилось к серверу то загружло например: if (!fp) { echo 'сервер не работает'; } else { echo 'сервер работает'; } жду ответа... Это сервер SA-MP
У мну работает таймаут указаный в параметре: Код (Text): $ip_0 = '193.138.147.23'; $port_0 = 8000; $fp = @fsockopen($ip_0, $port_0, $errno, $errstr, 2); // 2 это время на попытку коннекта if (!$fp){ echo 'Нет эрекции :(.'; } else { echo 'Штучка работает.'; } php 5.2.3.
Неа, не выходит, тут именно для сервера SA-MP нужно конектится только через UDP... без всегда пишет Нет эрекции а если с то: Если с UDP то всегда пишет есть конект... скрипт такой: Код (Text): <?php /*---------------------------------------------------+ | PHP-Fusion 6 Content Management System +----------------------------------------------------+ | Copyright © 2002 - 2005 Nick Jones | http://www.php-fusion.co.uk/ +----------------------------------------------------+ | Released under the terms & conditions of v2 of the | GNU General Public License. For details refer to | the included gpl.txt file or visit http://gnu.org +----------------------------------------------------*/ /* Created for PHP-FUSION 6.01.11 © 2007 by AlexALX http://www.alexalx-soft.com/ */ $ip_0 = '193.138.147.23'; $port_0 = '8000'; $fp = @fsockopen('udp://' . $ip_0, $port_0, $errno, $errstr, 2); // 2 это время на попытку коннекта if (!$fp){ echo 'Нет эрекции :(.'; } else { echo 'Штучка работает.'; } ?>
Хм... а чего вы хотели? в UDP нет контроля получения пакетов. В нем можно проверять только наличие ответа....
Я сумел сделать таймаут... но теперь выходит так... Код (Text): Warning: fread() [function.fread]: Length parameter must be greater than 0 in /usr/home/vshosts/hosts/u5034/alexalx-soft.com/www/infusions/sa-mp/sa-mp.php on line 93 Сервер не работает. как можно эту ошибку спрятать? вот код: Код (Text): socket_set_timeout($fp, 2); $packet = 'SAMP'; $packet .= chr(strtok($ip_0, '.')); $packet .= chr(strtok('.')); $packet .= chr(strtok('.')); $packet .= chr(strtok('.')); $packet .= chr($port_0 & 0xFF); $packet .= chr($port_0 >> 8 & 0xFF); fwrite($fp, $packet.'i'); fread($fp, 11); $is_passworded = ord(fread($fp, 1)); $plr_count = ord(fread($fp, 2)); $max_plrs = ord(fread($fp, 2)); $strlen = ord(fread($fp, 4)); $hostname = fread($fp, $strlen); if (!$hostname) { echo 'Сервер не работает.'; } else {
AlexALX, я ступил, извиняюсь. Протокол не указал и тупо обрадовался, что может как-то прикрутили . Код (Text): $hostname = @fread($fp, $strlen); ? upd Код (Text): if ($strlen) $hostname = fread($fp, $strlen); ?
Блин. скрипт большой, я дал только кусок маленький, там где таймаут сделать нужно... как спрятать ошибку? я только с ошибкой смог таймаут сделать...