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 相关文章推荐
基于mysql的bbs设计(一)
Oct 09 PHP
php中实现记住密码自动登录的代码
Mar 02 PHP
PHP性能优化准备篇图解PEAR安装
Dec 05 PHP
php引用返回与取消引用的详解
Jun 08 PHP
thinkphp控制器调度使用示例
Feb 24 PHP
ThinkPHP CURD方法之data方法详解
Jun 18 PHP
浅析Yii2 GridView实现下拉搜索教程
Apr 22 PHP
PHPExcel导出2003和2007的excel文档功能示例
Jan 04 PHP
php正则判断是否为合法身份证号的方法
Mar 16 PHP
php实现查询功能(数据访问)
May 23 PHP
PHP截取发动短信内容的方法
Jul 04 PHP
原生JS实现Ajax通过GET方式与PHP进行交互操作示例
May 12 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
将OICQ数据转成MYSQL数据
2006/10/09 PHP
PHP+MySQL实现的简单投票系统实例
2016/02/24 PHP
基于PHPexecl类生成复杂的报表表头示例
2016/10/14 PHP
PHP进程通信基础之信号量与共享内存通信
2017/02/19 PHP
JavaScript子窗口ModalDialog中操作父窗口对像
2012/12/11 Javascript
javascript与jquery中跳出循环的区别总结
2013/11/04 Javascript
JS清空多文本框、文本域示例代码
2014/02/24 Javascript
js密码强度校验
2015/11/10 Javascript
基于javascript实现checkbox复选框实例代码
2016/01/28 Javascript
Javascript动画效果(3)
2016/10/11 Javascript
jQuery旋转插件jqueryrotate用法详解
2016/10/13 Javascript
jq给页面添加覆盖层遮罩的实例
2017/02/16 Javascript
EsLint入门学习教程
2017/02/17 Javascript
使用canvas及js简单生成验证码方法
2017/04/02 Javascript
JS简单表单验证功能完整示例
2020/01/26 Javascript
详解小程序横屏方案对比
2020/06/28 Javascript
python中sys.argv参数用法实例分析
2015/05/20 Python
python实现向微信用户发送每日一句 python实现微信聊天机器人
2019/03/27 Python
PyTorch中topk函数的用法详解
2020/01/02 Python
pytorch cuda上tensor的定义 以及减少cpu的操作详解
2020/06/23 Python
纯CSS3实现3D旋转书本效果
2016/03/21 HTML / CSS
处理textarea中的换行和空格
2019/12/12 HTML / CSS
Hotels.com爱尔兰:全球酒店预订
2017/02/24 全球购物
美国棒球装备和用品商店:Baseball Savings
2018/06/09 全球购物
华为的Java面试题
2014/03/07 面试题
大学校园毕业自我鉴定
2014/01/15 职场文书
农民致富事迹材料
2014/01/23 职场文书
2014年环卫工作总结
2014/11/22 职场文书
毕业论文答辩稿范文
2015/06/23 职场文书
大学学习委员竞选稿
2015/11/20 职场文书
2016年教师学习教师法心得体会
2016/01/20 职场文书
股东出资协议书
2016/03/21 职场文书
详解redis分布式锁的这些坑
2021/05/19 Redis
怎么用Python识别手势数字
2021/06/07 Python
国庆节到了,利用JS实现一个生成国庆风头像的小工具 详解实现过程
2021/10/05 Javascript
Pygame Draw绘图函数的具体使用
2021/11/17 Python