Quantcast
Channel: Сообщество PHP DevelStudio - среда разработки программ
Viewing all articles
Browse latest Browse all 6336

Timeout

$
0
0
Здравствуйте.
Как сделать таймаут 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($fp10); 
        @
stream_set_blocking($fptrue); 

        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 >> 0xFF); 

            
fwrite($fp$packet."i"); 
            
fread($fp11); 
            
$pwd = @ord(fread($fp1)); 
            
$players = @ord(fread($fp2)); 
            
$maxplayers = @ord(fread($fp2)); 
            
$strlen = @ord(fread($fp4)); 
            
$hostname = @fread($fp$strlen); 
            
$strlen = @ord(fread($fp4)); 
            
$gamemode = @fread($fp$strlen); 
            
$strlen = @ord(fread($fp4)); 
            
$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;
            }
        }
    }


Но проблема, если сервер недоступен, то сайт просто зависает, а потом вышибает кучу ошибок. Но их я спрятал через @ но сам факт, что сайт зависает. Как сделать чтобы возвращало false, если сервер выключен, без зависания сайта. Вот для этого нужен таймаут.
Вызываю так: echo Samp('217.106.106.87', '7978', 'hostname');

Viewing all articles
Browse latest Browse all 6336

Trending Articles