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的数据库抽象层函数库
Oct 09 PHP
PHP 的异常处理、错误的抛出及回调函数等面向对象的错误处理方法
Dec 07 PHP
基于MySQL分区性能的详细介绍
May 02 PHP
PHP CLI模式下的多进程应用分析
Jun 03 PHP
解析:php调用MsSQL存储过程使用内置RETVAL获取过程中的return值
Jul 03 PHP
将酷狗krc歌词解析并转换为lrc歌词php源码
Jun 20 PHP
php使用cookie保存用户登录的用户名实例
Jan 26 PHP
PHP获取文件相对路径的方法
Feb 26 PHP
thinkphp验证码的实现(form、ajax实现验证)
Jul 28 PHP
使用PHPMailer发送邮件实例
Feb 15 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
Nov 17 PHP
TP5(thinkPHP框架)实现后台清除缓存功能示例
May 29 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开启gzip页面压缩实例代码
2010/03/11 PHP
php中mysql模块部分功能的简单封装
2011/09/30 PHP
php获取QQ头像并显示的方法
2014/12/23 PHP
php遍历类中包含的所有元素的方法
2015/05/12 PHP
使用IE6看老赵的博客 jQuery初探
2010/01/17 Javascript
ASP中Sub和Function的区别说明
2020/08/30 Javascript
给事件响应函数传参数的四种方式小结
2013/12/05 Javascript
jQuery实现div浮动层跟随页面滚动效果
2014/02/11 Javascript
jQuery实现表格行上下移动和置顶效果
2015/06/05 Javascript
基于jQuery的网页影音播放器jPlayer的基本使用教程
2016/03/08 Javascript
关于JSON.parse(),JSON.stringify(),jQuery.parseJSON()的用法
2016/06/30 Javascript
Node.js + Redis Sorted Set实现任务队列
2016/09/19 Javascript
jQuery 常见小例汇总
2016/12/14 Javascript
基于vue.js轮播组件vue-awesome-swiper实现轮播图
2017/03/17 Javascript
3分钟快速搭建nodejs本地服务器方法运行测试html/js
2017/04/01 NodeJs
使用Node.js实现RESTful API的示例
2017/08/01 Javascript
关于Vue在ie10下空白页的debug小结
2018/05/02 Javascript
[01:34]DAC2018主赛事第四日五佳镜头 Gh巨牙海民助Miracle-死里逃生
2018/04/07 DOTA
对python抓取需要登录网站数据的方法详解
2018/05/21 Python
使用Python如何测试InnoDB与MyISAM的读写性能
2018/09/18 Python
Python3爬虫学习之爬虫利器Beautiful Soup用法分析
2018/12/12 Python
Django数据库连接丢失问题的解决方法
2018/12/29 Python
使用 Django Highcharts 实现数据可视化过程解析
2019/07/31 Python
将自己的数据集制作成TFRecord格式教程
2020/02/17 Python
python语言的优势是什么
2020/06/17 Python
狗狗玩具、零食和咀嚼物的月度送货服务:Super Chewer
2018/08/22 全球购物
Bulk Powders意大利:运动补充在线商店
2019/02/09 全球购物
出生公证委托书
2014/04/03 职场文书
歌颂祖国演讲稿
2014/05/04 职场文书
考试作弊检讨书怎么写?
2014/12/21 职场文书
个人汇报材料范文
2014/12/30 职场文书
创业计划书之暑假培训班
2019/11/09 职场文书
MySQL对数据表已有表进行分区表的实现
2021/11/01 MySQL
MySql重置root密码 --skip-grant-tables
2022/04/11 MySQL
Python matplotlib多个子图绘制整合
2022/04/13 Python
vue如何在data中引入图片的正确路径
2022/06/05 Vue.js