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 fgetcsv 定义和用法(附windows与linux下兼容问题)
May 29 PHP
php读取csv文件后,uft8 bom导致在页面上显示出现问题的解决方法
Aug 10 PHP
php strrpos()与strripos()函数
Aug 31 PHP
关于JSON以及JSON在PHP中的应用技巧
Nov 27 PHP
ThinkPHP3.1新特性之命名范围的使用
Jun 19 PHP
Yii配置与使用memcached缓存的方法
Jul 13 PHP
功能强大的php分页函数
Jul 20 PHP
给大家分享几个常用的PHP函数
Jan 15 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
Feb 10 PHP
PHP之多条件混合筛选功能的实现方法
Oct 09 PHP
浅谈laravel中的关联查询with的问题
Oct 10 PHP
Laravel 微信小程序后端搭建步骤详解
Nov 26 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
全国FM电台频率大全 - 6 辽宁省
2020/03/11 无线电
php数组的概述及分类与声明代码演示
2013/02/26 PHP
PHP 常用的header头部定义汇总
2015/06/19 PHP
php使用pear_smtp发送邮件
2016/04/15 PHP
php文件上传及下载附带显示文件及目录功能
2017/04/27 PHP
PHP实现json_decode不转义中文的方法
2017/05/20 PHP
thinkphp5引入公共部分header、footer的方法详解
2018/09/14 PHP
统计PHP目录中的文件数方法
2019/03/05 PHP
使用tp框架和SQL语句查询数据表中的某字段包含某值
2019/10/18 PHP
javascript concat数组累加 示例
2009/09/03 Javascript
jQuery源码分析之jQuery中的循环技巧详解
2014/09/06 Javascript
js鼠标滑过图片震动特效的方法
2015/02/17 Javascript
使用JavaScript开发IE浏览器本地插件实例
2015/02/18 Javascript
AngularJS 与Bootstrap实现表格分页实例代码
2016/10/14 Javascript
基于Layer+jQuery的自定义弹框
2020/05/26 Javascript
微信小程序  modal详解及实例代码
2016/11/09 Javascript
angularjs的select使用及默认选中设置
2017/04/08 Javascript
Angular实现一个简单的多选复选框的弹出框指令实例
2017/04/25 Javascript
微信小程序实现多个按钮toggle功能的实例
2017/06/13 Javascript
基于ExtJs在页面上window再调用Window的事件处理方法
2017/07/26 Javascript
vue中的router-view组件的使用教程
2018/10/23 Javascript
JS无限级导航菜单实现方法
2019/01/05 Javascript
微信小程序点击列表跳转到对应详情页过程解析
2019/09/26 Javascript
JavaScript如何判断input数据类型
2020/02/06 Javascript
Django框架中间件(Middleware)用法实例分析
2019/05/24 Python
python写日志文件操作类与应用示例
2019/07/01 Python
django中瀑布流写法实例代码
2019/10/14 Python
python如何绘制疫情图
2020/09/16 Python
Python使用struct处理二进制(pack和unpack用法)
2020/11/12 Python
Python 实现RSA加解密文本文件
2020/12/30 Python
优质有机椰子产品:Dr. Goerg
2019/09/24 全球购物
综合测评自我鉴定
2013/10/08 职场文书
总经理工作职责范文
2014/03/14 职场文书
公司运动会策划方案
2014/05/25 职场文书
2015学习委员工作总结范文
2015/04/03 职场文书
table不让td文字溢出操作方法
2022/12/24 HTML / CSS