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 json格式和js json格式 js跨域调用实现代码
Sep 08 PHP
shell脚本作为保证PHP脚本不挂掉的守护进程实例分享
Jul 15 PHP
PHP入门之常量简介和系统常量
May 12 PHP
初识Laravel
Oct 30 PHP
php实现过滤UBB代码的类
Mar 12 PHP
PHP文件生成的图片无法使用CDN缓存的解决方法
Jun 20 PHP
PHP实现XML与数据格式进行转换类实例
Jul 29 PHP
详解PHP的Yii框架中日志的相关配置及使用
Dec 08 PHP
PHP编程计算两个时间段是否有交集的实现方法(不算边界重叠)
May 30 PHP
php7基于递归实现删除空文件夹的方法示例
Jun 15 PHP
PHP简单实现模拟登陆功能示例
Sep 15 PHP
PHP时间处理类操作示例
Sep 05 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面向对象全攻略 (十四) php5接口技术
2009/09/30 PHP
ThinkPHP采用原生query实现关联查询left join实例
2014/12/02 PHP
如何用PHP来实现一个动态Web服务器
2015/07/29 PHP
php生成动态验证码gif图片
2015/10/19 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
2017/11/13 PHP
浅析PHP类的反射来实现依赖注入过程
2018/02/06 PHP
Jquery 自定义动画概述及示例
2013/03/29 Javascript
javascript中处理时间戳为日期格式的方法
2014/01/02 Javascript
Bootstrap按钮下拉菜单组件详解
2016/05/10 Javascript
基于JavaScript实现随机颜色输入框
2016/12/10 Javascript
Javascript中引用类型传递的知识点小结
2017/03/06 Javascript
微信小程序停止其他视频播放当前视频的实例代码
2019/12/25 Javascript
[01:14:05]《加油DOTA》第四期
2014/08/25 DOTA
Python中的字典遍历备忘
2015/01/17 Python
使用Python设置tmpfs来加速项目的教程
2015/04/17 Python
Python中的匿名函数使用简介
2015/04/27 Python
python实现判断数组是否包含指定元素的方法
2015/07/15 Python
python+unittest+requests实现接口自动化的方法
2018/11/29 Python
通过实例解析Python调用json模块
2019/12/11 Python
python虚拟环境模块venv使用及示例
2020/03/04 Python
python的sys.path模块路径添加方式
2020/03/09 Python
详解python算法常用技巧与内置库
2020/10/17 Python
飞利浦比利时官方网站:Philips比利时
2016/08/24 全球购物
当当网官方旗舰店:中国图书销售夺金品牌
2018/04/02 全球购物
柏林通行证:Berlin Pass
2018/04/11 全球购物
TALLY WEiJL法国网上商店:服装、时装及配饰
2019/08/31 全球购物
德国帽子专家:Hutshopping
2019/11/03 全球购物
下述程序的作用是计算机数组中的最大元素值及其下标
2012/11/26 面试题
电子信息工程专业自荐书
2014/06/24 职场文书
自我工作评价范文
2015/03/06 职场文书
冲出亚马逊观后感
2015/06/03 职场文书
2016教师廉洁从教心得体会
2016/01/13 职场文书
担保书怎么写 ?
2019/04/22 职场文书
PostgreSQL将数据加载到buffer cache中操作方法
2021/04/16 PostgreSQL
Python爬虫之爬取二手房信息
2021/04/27 Python
MySQL中IO问题的深入分析与优化
2022/04/02 MySQL