【问题标题】:How to check a UDP address exists with PHP and fsockopen?如何使用 PHP 和 fsockopen 检查 UDP 地址是否存在?
【发布时间】:2012-05-31 16:37:49
【问题描述】:

我正在使用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 中仍然处于活动状态?

谢谢

【问题讨论】:

  • 我想知道是否有一个 PHP 设置来禁用套接字/流错误,就像你可以使用 libxml 和 cURL 一样。就像你说的,你也可以使用讨厌的老黑客@fsockeopen(...) 来压制它们。
  • 如果我想使用 cURL 但它不支持 UDP 我会,至少我不知道该怎么做!

标签: php sockets


【解决方案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
?> 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-10
    • 1970-01-01
    • 2013-08-22
    • 2016-08-20
    • 2013-11-28
    • 2012-09-09
    • 1970-01-01
    • 2013-12-18
    相关资源
    最近更新 更多