WHOIS类的修改版


Posted in PHP onOctober 09, 2006

1、简化了代码。(其实就是去掉了一些用不着的变量的定义)
2、针对从INTERNIC检索到的信息过于简单,根据INTERNIC反馈的信息中的WHOIS SERVER进行进一步查询。比如,YAHOO在whois.networksolutions.com上有更详细的信息。

class whois {  

var $use_cache = 1;  
var $FROM_CACHE=0;  
var $cache_dir = "./"; // 根据你的系统自己设置

var $port = 43;  
var $MAXLEN = 100;  

// 如果你想在连接失败后自动重试,
// 设置重试次数 $MAX_RETRIES
var $MAX_RETRIES = 0;  
var $SLEEP_VAL = 1;  
var $RETRY = 0;  

var $FOUND = 0; // 查询没有结果,次值为0
var $ERROR = 0; // 查询过程中的出错次数
var $DATA_MIN = 8; // 我们至少应该获得8个字节的数据
var $DATA_COUNT = 0;  

var $WHOIS_SERVER;
var $NEW_WHOIS;
var $FURTHER_INFO = 0;

// 打开和WHOIS SERVER的SOCKET连接
// 默认的是 whois.internic.net  
function connect ($server) {
$this->RETRY=0;
while($this->RETRY <= $this->MAX_RETRIES):
$ptr = fsockopen($server, $this->port);  
if($ptr>0):  
$this->ERROR=0; // just in case we're on a retry  
return($ptr);  
else:  
$this->ERROR++;  
$this->RETRY++;  
sleep($this->SLEEP_VAL);  
endif;  
endwhile;  
}  

// 获取简单的查询结果,并以行为单位,放入数组
// 国际域名查询
function rawlookup ($query, $server) {

if(!$query):  
return( "");  
endif;

$ptr=$this->connect($server);

if($ptr):  
if(!ereg($query, "n$")):  
$query .= "n";  
endif;  
fputs($ptr, "$query");  
$i=0;  
$this->FOUND=1;  
while(!feof($ptr)):  
$array[$i]=fgets($ptr,$this->MAXLEN);  
$this->DATA_COUNT+=strlen(chop($array[$i]));  
if(eregi( "No match for", $array[$i]) || eregi ("No entries found", $array[$i])):  
$this->FOUND=0;  
elseif(eregi( "WHOIS database is down",$array[$i])):  
$this->ERROR++;  
$this->FOUND=0;  
elseif(eregi( "Please wait a while and try again",$array[$i])):  
$this->ERROR++;  
$this->FOUND=0;  
break;  
endif;  
if(eregi("Whois Server:",$array[$i])):
$this->NEW_WHOIS=trim(substr(trim($array[$i]),(strlen(trim($array[$i]))-13)*(-1)));
$this->FURTHER_INFO=1;
endif;
$i++;  
endwhile;  

fclose($ptr);  

if($this->DATA_COUNT>$this->DATA_MIN):
return($array);  
else:  
$this->ERROR++;  
endif;  
else:  
$this->ERROR++;  
endif;
}  

// 国内域名查询
function cnrawlookup ($query, $server) {  
if(!$query):  
return( "");  
endif;  

$ptr=$this->connect($server);  
if($ptr):  
if(!ereg($query, "n$")):  
$query .= "n";  
endif;  
fputs($ptr, "$query");  
$i=0;  
$this->FOUND=1;  
while(!feof($ptr)):  
$array[$i]=fgets($ptr,$this->MAXLEN);  
$this->DATA_COUNT+=strlen(chop($array[$i]));  
if(eregi( "No match for", $array[$i]) || eregi ("No entries found", $array[$i])):  
$this->FOUND=0;  
elseif(eregi( "WHOIS database is down",$array[$i])):  
$this->ERROR++;  
$this->FOUND=0;  
elseif(eregi( "Please wait a while and try again",$array[$i])):  
$this->ERROR++;  
$this->FOUND=0;  
break;  
endif;  
$i++;  
endwhile;  
fclose($ptr);  

if($this->DATA_COUNT>$this->DATA_MIN):
return($array);  
else:  
$this->ERROR++;  
endif;  
else:  
$this->ERROR++;  
endif;  
}  
};

$myWHOIS=new whois();

$thisname=$servername.$domainname;
// 根据国内域名或国际域名选择WHOIS SERVER
if (ereg(".cn$",$thisname))
{
$myWHOIS->WHOIS_SERVER="whois.cnnic.net.cn";
$array=$myWHOIS->cnrawlookup($thisname,$myWHOIS->WHOIS_SERVER);
}
else
{
$myWHOIS->WHOIS_SERVER="whois.internic.net";
//$myWHOIS->WHOIS_SERVER="whois.networksolutions.com";
$array=$myWHOIS->rawlookup($thisname,$myWHOIS->WHOIS_SERVER);
}

echo "
".$thisname."
";
echo "";
$x=0;
while ($x {
echo " $x ";
echo " $array[$x] ";
$x++;
}
echo "  
";

if (!ereg(".cn$",$thisname))
{
echo "
Furth infomation
";
$array_further=$myWHOIS->rawlookup($thisname,$myWHOIS->NEW_WHOIS);

echo "";
$x=0;
while ($x {
echo " $x ";
echo " $array_further[$x] ";
$x++;
}
echo "  
";
}

?>   

PHP 相关文章推荐
PHP怎样调用MSSQL的存储过程
Oct 09 PHP
PHP手机号码归属地查询代码(API接口/mysql)
Sep 04 PHP
php并发对MYSQL造成压力的解决方法
Feb 21 PHP
ThinkPHP实现动态包含文件的方法
Nov 29 PHP
PHP从FLV文件获取视频预览图的方法
Mar 12 PHP
php开发中的页面跳转方法总结
Apr 26 PHP
Thinkphp模板标签if和eq的区别和比较实例分析
Jul 01 PHP
twig里使用js变量的方法
Feb 05 PHP
php封装的验证码工具类完整实例
Oct 19 PHP
Redis使用Eval多个键值自增的操作实例
Nov 04 PHP
PHP用swoole+websocket和redis实现web一对一聊天
Nov 05 PHP
laravel与thinkphp之间的区别与优缺点
Mar 02 PHP
很实用的一个完整email发送程序
Oct 09 #PHP
用PHP和ACCESS写聊天室(三)
Oct 09 #PHP
对javascript和select部件的结合运用
Oct 09 #PHP
用PHP和ACCESS写聊天室(二)
Oct 09 #PHP
用PHP和ACCESS写聊天室(一)
Oct 09 #PHP
不用数据库的多用户文件自由上传投票系统(1)
Oct 09 #PHP
不用数据库的多用户文件自由上传投票系统(3)
Oct 09 #PHP
You might like
PHP数据类型之整数类型、浮点数的介绍
2013/04/28 PHP
PHP中error_reporting函数用法详细介绍
2017/06/11 PHP
利用Homestead快速运行一个Laravel项目的方法详解
2017/11/14 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
2018/06/13 PHP
PHP使用XMLWriter读写xml文件操作详解
2018/07/31 PHP
jquery 触发a链接点击事件解决方案
2013/05/02 Javascript
Backbone.js的一些使用技巧
2015/07/01 Javascript
jQuery多文件异步上传带进度条实例代码
2016/08/16 Javascript
根据Bootstrap Paginator改写的js分页插件
2016/12/25 Javascript
JavaScript中数组的各种操作的总结(必看篇)
2017/02/13 Javascript
bootstrap table方法之expandRow-collapseRow展开或关闭当前行数据
2020/08/09 Javascript
JS实现在线ps功能详解
2019/07/31 Javascript
基于javascript处理nginx请求过程详解
2020/07/07 Javascript
详解python中的线程
2018/02/10 Python
Django添加sitemap的方法示例
2018/08/06 Python
浅谈python之新式类
2018/08/12 Python
Python数据类型之String字符串实例详解
2019/05/08 Python
python 用所有标点符号分隔句子的示例
2019/07/15 Python
python实现图片二值化及灰度处理方式
2019/12/07 Python
使用Python打造一款间谍程序的流程分析
2020/02/21 Python
K最近邻算法(KNN)---sklearn+python实现方式
2020/02/24 Python
python json 递归打印所有json子节点信息的例子
2020/02/27 Python
Django 解决由save方法引发的错误
2020/05/21 Python
详解Django自定义图片和文件上传路径(upload_to)的2种方式
2020/12/01 Python
Python 中Operator模块的使用
2021/01/30 Python
临床医学应届生求职信
2013/11/06 职场文书
大学四年的个人自我评价
2014/01/14 职场文书
大学自主招生自荐信范文
2014/02/26 职场文书
霸王洗发水广告词
2014/03/14 职场文书
物资采购方案
2014/06/12 职场文书
保送生自荐信范文
2015/03/26 职场文书
企业财务管理制度范本
2015/08/04 职场文书
初中地理教学反思
2016/02/19 职场文书
《家世》读后感:看家训的力量
2019/12/30 职场文书
MySQL中distinct和count(*)的使用方法比较
2021/05/26 MySQL
Redis之RedisTemplate配置方式(序列和反序列化)
2022/03/13 Redis