1

UDP アドレスから情報を取得するために使用fsockopenしていますが、唯一の問題は、一部の 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

エラーを抑制する代わりに@、独自のエラー ハンドラを実装できます。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
?> 
于 2012-05-31T16:59:32.833 に答える