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脚本代码
Feb 19 PHP
PHP连接MySQL的2种方法小结以及防止乱码
Mar 11 PHP
thinkphp实现数组分页示例
Apr 13 PHP
跟我学Laravel之配置Laravel
Oct 15 PHP
浅析PHP中call user func()函数及如何使用call user func调用自定义函数
Nov 05 PHP
Zend Framework动作助手Url用法详解
Mar 05 PHP
thinkphp5 migrate数据库迁移工具
Feb 20 PHP
详解laravel安装使用Passport(Api认证)
Jul 27 PHP
laravel-admin自动生成模块,及相关基础配置方法
Oct 08 PHP
laravel框架邮箱认证实现方法详解
Nov 22 PHP
PHP中mysqli_get_server_version()的实例用法
Feb 03 PHP
PHP pthreads v3使用中的一些坑和注意点分析
Feb 21 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 代码优化的42条建议 推荐
2009/09/25 PHP
php学习笔记 PHP面向对象的程序设计
2011/06/13 PHP
php stream_get_meta_data返回值
2013/09/29 PHP
Laravel Eloquent分表方法并使用模型关联的实现
2019/11/25 PHP
会自动逐行上升的文本框
2006/06/30 Javascript
jqPlot jquery的页面图表绘制工具
2009/07/25 Javascript
js获取location.href的参数实例代码
2013/08/02 Javascript
深入分析JQuery和JavaScript的异同
2014/10/23 Javascript
js实现文章文字大小字号功能完整实例
2014/11/01 Javascript
JavaScript Math.ceil 方法(对数值向上取整)
2015/01/09 Javascript
JavaScript 变量、作用域及内存
2015/04/08 Javascript
jQuery学习笔记之回调函数
2016/08/15 Javascript
js实现文字无缝向上滚动
2017/02/16 Javascript
jQuery ajax实现省市县三级联动
2021/03/07 Javascript
微信JS SDK接入的几点注意事项(必看篇)
2017/06/23 Javascript
基于JS实现移动端左滑删除功能
2017/07/28 Javascript
BootStrap模态框不垂直居中的解决方法
2017/10/19 Javascript
Taro UI框架开发小程序实现左滑喜欢右滑不喜欢效果的示例代码
2020/05/18 Javascript
React实现全选功能
2020/08/25 Javascript
JS实现炫酷轮播图
2020/11/15 Javascript
Python中使用PDB库调试程序
2015/04/05 Python
Python类的用法实例浅析
2015/05/27 Python
使用pycharm在本地开发并实时同步到服务器
2019/08/02 Python
Python实现Restful API的例子
2019/08/31 Python
如何使用python代码操作git代码
2020/02/29 Python
微软俄罗斯官方网站:Microsoft俄罗斯
2016/09/18 全球购物
京东国际站:JOYBUY
2017/11/23 全球购物
单身旅行者的单身假期:Just You
2018/04/08 全球购物
英国独特家具和家庭用品购物网站:Cuckooland
2020/08/30 全球购物
EMPHASIS艾斐诗官网:周生生旗下原创精品珠宝品牌
2020/12/17 全球购物
这76道Java面试题及答案,祝你能成功通过面试
2016/04/16 面试题
工商学院毕业生自荐信
2013/11/12 职场文书
小学毕业家长寄语
2014/01/19 职场文书
党支部培养考察意见
2015/06/02 职场文书
检讨书格式
2019/04/25 职场文书
pytorch 如何把图像数据集进行划分成train,test和val
2021/05/31 Python