1

我正在使用fsockopen从 UDP 地址获取信息,唯一的问题是某些 UDP 地址可能仍未处于活动状态。

我通过创建套接字

$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 中仍然处于活动状态?

谢谢

4

1 回答 1

1

@您可以实现自己的错误处理程序,而不是抑制您可以做的错误。设置错误处理程序

<?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
?> 
于 2012-05-31T16:59:32.833 回答