用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 相关文章推荐
php的access操作类
Apr 09 PHP
php Try Catch异常测试
Mar 01 PHP
php中的一些数组排序方法分享
Jul 20 PHP
PHP 自定义错误处理函数的使用详解
May 10 PHP
支持中文和其他编码的php截取字符串函数分享(截取中文字符串)
Mar 13 PHP
php结合正则获取字符串中数字
Jun 19 PHP
PHP多态代码实例
Jun 26 PHP
高质量PHP代码的50个实用技巧必备(下)
Jan 22 PHP
PHP面相对象中的重载与重写
Feb 13 PHP
PHP长连接实现与使用方法详解
Feb 11 PHP
Codeigniter里的无刷新上传的实现代码
Apr 14 PHP
PHP实现常用排序算法的方法
Feb 05 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
基于HTTP长连接的&quot;服务器推&quot;技术的php 简易聊天室
2009/10/31 PHP
php注册和登录界面的实现案例(推荐)
2016/10/24 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
2017/07/19 PHP
使用laravel的Eloquent模型如何获取数据库的指定列
2019/10/17 PHP
深入解析PHP底层机制及相关原理
2020/12/11 PHP
web前端开发也需要日志
2010/12/09 Javascript
js中parseFloat(参数1,参数2)定义和用法及注意事项
2013/01/27 Javascript
多个表单中如何获得这个文件上传的网址实现js代码
2013/03/25 Javascript
js冒泡法和数组转换成字符串示例代码
2013/08/14 Javascript
js获取指定的cookie的具体实现
2014/02/20 Javascript
JavaScript中的apply和call函数详解
2014/07/20 Javascript
javascript动态控制服务器控件实例
2014/09/05 Javascript
Jquery实现鼠标移动放大图片功能实例
2015/03/25 Javascript
12行javascript代码绘制一个八卦图
2015/04/02 Javascript
JavaScript中join()方法的使用简介
2015/06/09 Javascript
Node.js巧妙实现Web应用代码热更新
2015/10/22 Javascript
Javascript中this绑定的3种方法与比较
2016/10/13 Javascript
浅谈对Angular中的生命周期钩子的理解
2017/07/31 Javascript
关于vue.extend和vue.component的区别浅析
2017/08/16 Javascript
js事件触发操作实例分析
2019/06/21 Javascript
Vue+Node实现商品列表的分页、排序、筛选,添加购物车功能详解
2019/12/07 Javascript
vue中解决chrome浏览器自动播放音频和MP3语音打包到线上的实现方法
2020/10/09 Javascript
使用webpack5从0到1搭建一个react项目的实现步骤
2020/12/16 Javascript
python生成requirements.txt的两种方法
2019/09/18 Python
浅谈Python 钉钉报警必备知识系统讲解
2020/08/17 Python
Html5应用程序缓存(Cache manifest)
2018/06/04 HTML / CSS
TUMI澳大利亚网站:美国旅行箱包品牌
2017/03/27 全球购物
美国本地交易和折扣网站:LocalFlavor.com
2017/10/26 全球购物
swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
2013/03/30 面试题
健康状况证明书
2014/11/26 职场文书
小学四年级学生评语
2014/12/26 职场文书
结婚喜宴祝酒词
2015/08/10 职场文书
2015年国庆节广播稿
2015/08/19 职场文书
深入理解Vue的数据响应式
2021/05/15 Vue.js
关于CSS自定义属性与前端页面的主题切换问题
2022/03/21 HTML / CSS
docker 制作mysql镜像并自动安装
2022/05/20 Servers