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 相关文章推荐
利用js调用后台php进行数据处理原码
Oct 09 PHP
php中字符串和正则表达式详解
Oct 23 PHP
php+mysql实现用户注册登陆的方法
Jan 03 PHP
PHP调用.NET的WebService 简单实例
Mar 27 PHP
支持中文的PHP按字符串长度分割成数组代码
May 17 PHP
使用PHP接受文件并获得其后缀名的方法
Aug 05 PHP
浅析Yii2缓存的使用
May 10 PHP
php版微信公众平台回复中文出现乱码问题的解决方法
Sep 22 PHP
PHP 文件锁与进程锁的使用示例
Aug 07 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
Nov 16 PHP
thinkPHP5.0框架事务处理操作简单示例
Sep 07 PHP
Yii框架核心组件类实例详解
Aug 06 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
对象失去焦点时自己动提交数据的实现代码
2012/11/06 PHP
PHP遍历某个目录下的所有文件和子文件夹的实现代码
2013/06/28 PHP
codeigniter中view通过循环显示数组数据的方法
2015/03/20 PHP
php中memcache 基本操作实例
2015/05/17 PHP
Zend Framework基于Command命令行建立ZF项目的方法
2017/02/18 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
2017/11/10 PHP
PHP pthreads v3下同步处理synchronized用法示例
2020/02/21 PHP
javascript下过滤数组重复值的代码
2007/09/10 Javascript
Jquery 组合form元素为json格式,asp.net反序列化
2009/07/09 Javascript
JavaScript 申明函数的三种方法 每个函数就是一个对象(一)
2009/12/04 Javascript
jQuery编写widget的一些技巧分享
2010/10/28 Javascript
jQuery新闻滚动插件 jquery.roller.js
2011/06/27 Javascript
jQuery中对未来的元素绑定事件用bind、live or on
2014/04/17 Javascript
Javascript学习笔记之数组的遍历和 length 属性
2014/11/23 Javascript
js实现网页右上角滑出会自动消失大幅广告的方法
2015/02/27 Javascript
基于jquery编写的放大镜插件
2016/03/23 Javascript
vue2滚动条加载更多数据实现代码
2017/01/10 Javascript
JS简单实现滑动加载数据的方法示例
2017/10/18 Javascript
[jQuery] 事件和动画详解
2019/03/05 jQuery
[56:38]DOTA2-DPC中国联赛正赛Aster vs Magma BO3 第一场 3月5日
2021/03/11 DOTA
Python 的 with 语句详解
2014/06/13 Python
Python解释执行原理分析
2014/08/22 Python
python开发之for循环操作实例详解
2015/11/12 Python
Python实现的堆排序算法示例
2018/04/29 Python
Python3实现的字典、列表和json对象互转功能示例
2018/05/22 Python
Python 实现还原已撤回的微信消息
2019/06/18 Python
python Shapely使用指南详解
2020/02/18 Python
HTML5表格_动力节点Java学院整理
2017/07/11 HTML / CSS
JD Sports瑞典:英国领先的运动时尚商店
2018/01/28 全球购物
优秀生推荐信范文
2013/11/28 职场文书
搬家公司的创业计划书
2014/01/01 职场文书
岗位竞聘书范文
2014/03/31 职场文书
中华魂放飞梦想演讲稿
2014/08/26 职场文书
集结号观后感
2015/06/08 职场文书
AJAX学习笔记
2021/05/18 Javascript
css3中transform属性实现的4种功能
2021/08/07 HTML / CSS