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 相关文章推荐
example1.php
Oct 09 PHP
mysql5写入和读出乱码解决
Nov 25 PHP
UCenter Home二次开发指南
May 28 PHP
PHP sprintf()函数用例解析
May 18 PHP
ajax在joomla中的原生态应用代码
Jul 19 PHP
thinkphp项目部署到Linux服务器上报错“模板不存在”如何解决
Apr 27 PHP
php微信开发之关键词回复功能
Jun 13 PHP
thinkphp5框架API token身份验证功能示例
May 21 PHP
PHP 结合 Boostrap 结合 js 实现学生列表删除编辑及搜索功能
May 21 PHP
Laravel数据库读写分离配置的方法
Oct 13 PHP
laravel 解决crontab不执行的问题
Oct 22 PHP
php post换行的方法
Feb 03 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
实用函数3
2007/11/08 PHP
php和js如何通过json互相传递数据相关问题探讨
2013/02/26 PHP
关于尾递归的使用详解
2013/05/02 PHP
PHP获取文件的MD5值并判断是否被修改的例子
2014/06/19 PHP
laravel model模型定义实现开启自动管理时间created_at,updated_at
2019/10/17 PHP
jquery中获得元素尺寸和坐标的方法整理
2014/05/18 Javascript
javascript的BOM汇总
2015/07/16 Javascript
纯css下拉菜单 无需js
2016/08/15 Javascript
JavaScript之cookie技术详解
2016/11/18 Javascript
JS中的作用域链
2017/03/01 Javascript
Vue2.0实现1.0的搜索过滤器功能实例代码
2017/03/20 Javascript
vue2的todolist入门小项目的详细解析
2017/05/11 Javascript
原生JS实现图片懒加载(lazyload)实例
2017/06/13 Javascript
关于vue.js发布后路径引用的问题解决
2017/08/15 Javascript
详解http访问解析流程原理
2017/10/18 Javascript
Vue 开发音乐播放器之歌手页右侧快速入口功能
2018/08/08 Javascript
微信小程序调用摄像头隐藏式拍照功能
2018/08/22 Javascript
详解vue使用插槽分发内容slot的用法
2019/03/28 Javascript
详解Vue的watch中的immediate与watch是什么意思
2019/12/30 Javascript
如何实现小程序与小程序之间的跳转
2020/11/04 Javascript
vant组件中 dialog的确认按钮的回调事件操作
2020/11/04 Javascript
一个超级简单的python web程序
2014/09/11 Python
如何解决cmd运行python提示不是内部命令
2020/07/01 Python
Python三维绘图之Matplotlib库的使用方法
2020/09/20 Python
餐饮管理自我介绍信
2014/01/15 职场文书
简历里的自我评价范文
2014/02/24 职场文书
项目负责人任命书
2014/06/04 职场文书
品牌转让协议书
2014/08/20 职场文书
教师节学生演讲稿
2014/09/03 职场文书
2014年优秀党员材料
2014/12/18 职场文书
营运督导岗位职责
2015/04/10 职场文书
2015年环境监察工作总结
2015/07/23 职场文书
MySQL获取所有分类的前N条记录
2021/05/07 MySQL
Python源码解析之List
2021/05/21 Python
python之基数排序的实现
2021/07/26 Python
部分武汉产收音机展览
2022/04/07 无线电