2012-05-31 26 views
1

我正在使用fsockopen從UDP地址獲取信息,唯一的問題是某些UDP地址可能不會處於活動狀態。如何檢查一個UDP地址存在與PHP和fsockopen?

創建由

$fp = fsockopen($tracker, $port, $errno, $errstr, 1); 

插座如果地址是有效的一切工作正常,但如果地址是無效的它生成此錯誤

Warning: fsockopen(): php_network_getaddresses: getaddrinfo failed: Name or service not known in 

我想這樣做,但它仍然會產生錯誤,

if(!$fp = fsockopen($tracker, $port, $errno, $errstr, 1)) { 
    // ERROR 
} else { 
    // CONTINUE 
} 

我可以錯誤抑制它,一切都很好,但我不喜歡犯錯誤或者抑制我的代碼。

如何確保任何給定的UDP地址仍然活躍與PHP?

感謝

+0

我不知道是否有PHP設置來禁用套接字/流錯誤,就像您可以使用libxml和cURL一樣。就像你說的那樣,你也可以使用討厭的老黑客@fsockeopen(...)來壓制它們。 – Xeoncross

+0

我會,如果我可以喜歡使用cURL,但它不支持UDP,至少我不知道如何做它,如果它! – Griff

回答

1

而不是抑制誤差@你能做到,你也可以實現自己的錯誤處理。 set_error_handler

<?php 
//Simple Blank error handler 
set_error_handler('my_error_handler'); 
function my_error_handler($errno, $errstr, $errfile, $errline) {} 

function checkUDP($host,$port=80){ 
    //look no suppression 
    $fp = fsockopen("udp://".$host, $port, $errno, $errstr,1.0); 
    if (!$fp) { 
     return false; 
    } else { 
     fclose($fp); 
     return true; 
    } 
} 

$good = 'tracker.publicbt.com'; 
$bad = 'trjjacker.publicbt.com'; 

if(checkUDP($good)){ 
    echo $good.' Good'; 
}else{ 
    echo $good.' Bad'; 
} 
echo '<br />'; 
if(checkUDP($bad)){ 
    echo $bad.' Good'; 
}else{ 
    echo $bad.' Bad'; 
} 

//tracker.publicbt.com Good 
//trjjacker.publicbt.com Bad 
?> 
+0

謝謝,「udp://」爲我工作。 – 2017-01-17 13:22:24