Здравствуйте.
Как сделать таймаут 1 секунду на подключение к серверу Samp для мониторинга. Есть такой скрипт:
Но проблема, если сервер недоступен, то сайт просто зависает, а потом вышибает кучу ошибок. Но их я спрятал через @ но сам факт, что сайт зависает. Как сделать чтобы возвращало false, если сервер выключен, без зависания сайта. Вот для этого нужен таймаут.
Вызываю так: echo Samp('217.106.106.87', '7978', 'hostname');
Как сделать таймаут 1 секунду на подключение к серверу Samp для мониторинга. Есть такой скрипт:
PHP код:
function Samp($ip, $port, $info){
if( !empty($ip) && !empty($port) && !empty($info) ){
$fp = @fsockopen('udp://' . $ip, $port, $errno, $errstr);
@stream_set_timeout($fp, 1, 0);
@stream_set_blocking($fp, true);
if(!$fp){
return '-';
}else{
$packet = "SAMP";
$packet .= chr(strtok($ip, "."));
$packet .= chr(strtok("."));
$packet .= chr(strtok("."));
$packet .= chr(strtok("."));
$packet .= chr($port & 0xFF);
$packet .= chr($port >> 8 & 0xFF);
fwrite($fp, $packet."i");
fread($fp, 11);
$pwd = @ord(fread($fp, 1));
$players = @ord(fread($fp, 2));
$maxplayers = @ord(fread($fp, 2));
$strlen = @ord(fread($fp, 4));
$hostname = @fread($fp, $strlen);
$strlen = @ord(fread($fp, 4));
$gamemode = @fread($fp, $strlen);
$strlen = @ord(fread($fp, 4));
$map = @fread($fp, $strlen);
fclose($fp);
if( $pwd ){
$pwd = 'Есть';
}else{
$pwd = 'Отсутствует';
}
$_Samp = array();
$_Samp = '';
switch($info){
case 'pwd':
return $pwd;
break;
case 'players':
return $players;
break;
case 'maxplayers':
return $maxplayers;
break;
case 'hostname':
return $hostname;
break;
case 'gamemode':
return $gamemode;
break;
case 'map':
return $map;
break;
}
}
}
}
Вызываю так: echo Samp('217.106.106.87', '7978', 'hostname');