如何使用 PHP 和 fsockopen 检查 UDP 地址是不是存在?
Posted
技术标签:
【中文标题】如何使用 PHP 和 fsockopen 检查 UDP 地址是不是存在?【英文标题】: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 我会,至少我不知道该怎么做!
【参考方案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
?>
【讨论】:
以上是关于如何使用 PHP 和 fsockopen 检查 UDP 地址是不是存在?的主要内容,如果未能解决你的问题,请参考以下文章
服务器如何开启php的fsockopen函数? 使用发邮箱类