用PHP编程开发“虚拟域名”系统


Posted in PHP onOctober 09, 2006

如果自己的服务器也能够实现简记域名就好了。其实这并不复杂。你也可以做一个简记域名系统。

简记域名系统的关键技术在于:实现Web页面的重定向(Redirctory)。在本质上,简记域名系统和虚拟机系统完全不同。虚拟机的虚拟域名和IP是存在一一对应关系的。而简记域名系统不需要将域名和IP做一一映射。也就是说,它根本不需要复杂的域名解析机制和虚拟机来完成,它所做的事情就是当你在请求yourname.somedomain时,将你的浏览器重新定向到你本来存放Html页面的地方。

本程序运行环境是:RedHat 5.1 Linux下的Apache1.3.6 Web服务器+PHP3语言。在编写程序之前,我们首先要设置好我们的服务器。首先要让Apache服务器支持php3。到ftp.redhat.com下载mod_php-2.0.1-9.i386.rpm,安装后,修改/etc/httpd/conf/http.conf文件,去掉#LoadModule php3_module一句前面的#注释号,同样在/etc/httpd/conf/srm.conf文件里去掉#AddType application/x-httpd-php3 .php3前面的注释号,同时在DirectoryIndex一项后添加index.php3。重新启动Apache Server,此时服务器就支持标准的php3语言脚本文件了并能将index.php3作为默认的首页。

设置DNS服务器,使其能对泛域名解析。一般的Unix和Linux系统的DNS解析都是由Bind守护程序完成的,Bind4和Bind8的配置文件分别/etc/named.boot和name.conf,配置时根据你的系统修改。设置Bind的配置文件/etc/named.boot,在其中加入“primary domain.com db.domain”一句,添加一个新的域记录。在/etc/name.conf中加入:

zone "domain.com" {

type master;

file "db.domain”; };

在/var/name/中新建主域记录文件db.domain,其格式为:

N SOA dns.domain.com root.domain.com (

199811291 ;Serial

28800 ;refresh

7200 ;retry

604800 ;expire

86400) ;minimum

dns

MX 10 dns.domain.com.

dns A 202.115.135.50

www A 202.115.135.50

* A 202.115.135.50

关键是最后一句,即将整个域可能出现未做标记的所有Hostname全部指向同一IP。 执行/usr/sbin/ndc reload,重新加载域名数据库。测试一下,此时应该随便ping一个domain域内的主机(除已经标记的),都指向了指定的IP,那么DNS服务器设置完成。

最后一步是编制PHP3脚本。我们刚才已经在图中详细的说明了整个的原理,所以写一个重新定向的程序就不是很难了。

让我们来看一个由IE5.0送出的完整HTTP头信息:

Accept: application/vnd.ms-excel, application/msword, application/vnd.ms-powerpoint,image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*

Accept-Encoding: gzip, deflate

Accept-Language: zh-cn

Connection: Keep-Alive

Host:ww.yahoo.com

User-Agent: Mozilla/4.0 (compatible; MSIE 5.0b1; Windows 98)

我们需要在整个HTTP头信息中取出Host信息,然后将http://www.jj.jx.cn/www.xxx.xxx/default.htm形式的第一部分“www”,即HostName(也即是用户注册的name)单独取出,作为重定向检索的关键字。

检索到用户注册的URL信息后,我们给用户浏览器送一个重定向命令“Localtion: http://www.jj.jx.cn/somewhere/sample.html”,将用户重定向到指定页面。

在PHP3中,有函数GetAllHeader(),取得浏览器送出的HTTP头信息。我们主要需要使用此函数来完成整个程序。

后面附有源程序,由于只是实验性质的,所以在查询用户信息时,没有使用数据库,如果整个系统要实际应用的话,一定要和数据库挂接起来,不然查询用户信息的过程将是十分漫长,大大影响效率,而且用户数据的管理也不方便。

在源程序中,所有用户信息记录在data子目录下user.dat文件中。其格式为:

username:

http://octopus.cdit.edu.cn/~qap213/index.html

附PHP3源程序:

<?

//Get HTTP's Header and parse it//

= getallheaders();
'www.knowsky.com

while (list(, ) = each()) {

if(=="Host"){= strtok(,".");}}

//Jump out the Banner's Window//

echo '<script language="JavaScript">',

'msg=window.open("banner.htm","sample",

"toolbar=no","directories=no",directories=no","menubar=no");',

'</script>';

// seek the user information from the recorded file//

if(!=file("data/user.dat")){echo "Open Data File Error!!";}

="http://";

for(=0;<count();++)

if(strtok(,":")==){

=; }

if(=="http://"){echo "not found the uesrname of Data!";}

else{

echo '<meta http-equiv="refresh" content="0;','url=',,'">';}

PHP 相关文章推荐
桌面中心(三)修改数据库
Oct 09 PHP
PHP 执行系统外部命令 system() exec() passthru()
Aug 11 PHP
php array_push()数组函数:将一个或多个单元压入数组的末尾(入栈)
Jul 12 PHP
php中获取远程客户端的真实ip地址的方法
Aug 03 PHP
php采用curl访问域名返回405 method not allowed提示的解决方法
Jun 26 PHP
用php代码限制国内IP访问我们网站
Sep 26 PHP
YII2.0之Activeform表单组件用法实例
Jan 09 PHP
php实现爬取和分析知乎用户数据
Jan 26 PHP
Symfony2使用Doctrine进行数据库查询方法实例总结
Mar 18 PHP
PHP简单留言本功能实现代码
Jun 09 PHP
PHP面向对象程序设计模拟一般面向对象语言中的方法重载(overload)示例
Jun 13 PHP
php源码的使用方法讲解
Sep 26 PHP
在Windows中安装Apache2和PHP4的权威指南
Oct 09 #PHP
自定义PHP分页函数
Oct 09 #PHP
用PHP实现WEB动态网页静态
Oct 09 #PHP
用libtemplate实现静态网页生成
Oct 09 #PHP
初探PHP5
Oct 09 #PHP
用PHP连mysql和oracle数据库性能比较
Oct 09 #PHP
利用文件属性结合Session实现在线人数统计
Oct 09 #PHP
You might like
晶体管单管来复再生式收音机
2021/03/02 无线电
php入门学习知识点三 PHP上传
2011/07/14 PHP
php第一次无法获取cookie问题处理
2014/12/15 PHP
如何使用Gitblog和Markdown建自己的博客
2015/07/31 PHP
PHP实现无限极分类的两种方式示例【递归和引用方式】
2019/03/25 PHP
Javascript Tab 导航插件 (23个)
2009/06/11 Javascript
JS定时器实例详细分析
2013/10/11 Javascript
JS父页面与子页面相互传值方法
2014/03/05 Javascript
jQuery实现动态添加和删除一个div
2015/08/12 Javascript
node.js cookie-parser之parser.js
2016/06/06 Javascript
在web中js实现类似excel的表格控件
2016/09/01 Javascript
JavaScript mixin实现多继承的方法详解
2017/03/30 Javascript
javascript中json对象json数组json字符串互转及取值方法
2017/04/19 Javascript
使用nodejs爬取前程无忧前端技能排行
2017/05/06 NodeJs
JS获取浏览器地址栏的多个参数值的任意值实例代码
2018/07/24 Javascript
JavaScript类型相关的常用操作总结
2019/02/14 Javascript
js实现石头剪刀布游戏
2020/10/11 Javascript
[40:48]DOTA2上海特级锦标赛D组败者赛 Liquid VS COL第二局
2016/02/28 DOTA
[06:44]2018DOTA2亚洲邀请赛4.5 SOLO赛 MidOne vs Sumail
2018/04/06 DOTA
python实现批量获取指定文件夹下的所有文件的厂商信息
2014/09/28 Python
Python程序中使用SQLAlchemy时出现乱码的解决方案
2015/04/24 Python
深入浅析Python中的yield关键字
2018/01/24 Python
详解Python核心对象类型字符串
2018/02/11 Python
Python3.6简单的操作Mysql数据库的三个实例
2018/10/17 Python
详解pyinstaller生成exe的闪退问题解决方案
2020/06/19 Python
Python  word实现读取及导出代码解析
2020/07/09 Python
Python爬虫实例之2021猫眼票房字体加密反爬策略(粗略版)
2021/02/22 Python
基于 HTML5 WebGL 实现的医疗物流系统
2019/10/08 HTML / CSS
英国殿堂级有机护肤品牌:Rodial
2017/04/17 全球购物
印尼在线购买隐形眼镜网站:Lensza.co.id
2019/04/27 全球购物
初一英语教学反思
2014/01/11 职场文书
经销商培训邀请函
2014/01/21 职场文书
消防宣传口号
2014/06/16 职场文书
奶茶店创业计划书
2014/08/14 职场文书
2014年高中教师工作总结
2014/12/19 职场文书
浅谈Python类的单继承相关知识
2021/05/12 Python