用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 相关文章推荐
phplock(php进程锁) v1.0 beta1
Nov 24 PHP
PHP新手入门学习方法
May 08 PHP
php数组函数序列之array_intersect() 返回两个或多个数组的交集数组
Nov 10 PHP
通过缓存数据库结果提高PHP性能的原理介绍
Sep 05 PHP
使用php判断网页是否gzip压缩
Jun 25 PHP
php使用substr()和strpos()联合查找字符串中某一特定字符的方法
May 12 PHP
PHP微信开发之有道翻译
Jun 23 PHP
php版微信发红包接口用法示例
Sep 23 PHP
PHPStrom 新建FTP项目以及在线操作教程
Oct 16 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
Feb 07 PHP
php校验公钥是否可用的实例方法
Sep 17 PHP
Yii实现微信公众号场景二维码的方法实例
Aug 30 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
我的论坛源代码(十)
2006/10/09 PHP
支持中文和其他编码的php截取字符串函数分享(截取中文字符串)
2014/03/13 PHP
php版微信公众平台接口参数调试实现判断用户行为的方法
2016/09/23 PHP
PHP设计模式之委托模式定义与用法简单示例
2018/08/13 PHP
laravel利用中间件防止未登录用户直接访问后台的方法
2019/09/30 PHP
从新浪弄下来的全屏广告代码 与使用说明
2007/03/15 Javascript
转自Jquery官方 jQuery1.1.3发布,速度提升800%,体积保持20K
2007/08/19 Javascript
比较详细的关于javascript 解析json的代码
2009/12/16 Javascript
jQuery 常见开发使用技巧总结
2009/12/26 Javascript
jQuery模拟超链接点击效果代码
2013/04/21 Javascript
JavaScript比较两个对象是否相等的方法
2015/02/06 Javascript
使用JavaScript实现弹出层效果的简单实例
2016/05/31 Javascript
jQuery插件扩展实例【添加回调函数】
2016/11/26 Javascript
详解angular中的作用域及继承
2017/05/31 Javascript
Node.js利用js-xlsx处理Excel文件的方法详解
2017/07/05 Javascript
在iframe中使bootstrap的模态框在父页面弹出问题
2017/08/07 Javascript
静态页面实现 include 引入公用代码的示例
2017/09/25 Javascript
微信小程序中使用wxss加载图片并实现动画效果
2018/08/13 Javascript
微信小程序MUI侧滑导航菜单示例(Popup弹出式,左侧不动,右侧滑动)
2019/01/23 Javascript
微信小程序实现渐入渐出动画效果
2019/06/13 Javascript
重学JS之显示强制类型转换详解
2019/06/30 Javascript
浅谈webpack和webpack-cli模块源码分析
2020/01/19 Javascript
[52:09]2014 DOTA2华西杯精英邀请赛 5 25 NewBee VS DK第二场
2014/05/26 DOTA
python中requests爬去网页内容出现乱码问题解决方法介绍
2017/10/25 Python
Python 将pdf转成图片的方法
2018/04/23 Python
python自动发送邮件脚本
2018/06/20 Python
一步步教你用python的scrapy编写一个爬虫
2019/04/17 Python
Python如何将图像音视频等资源文件隐藏在代码中(小技巧)
2020/02/16 Python
Python json格式化打印实现过程解析
2020/07/21 Python
Python根据URL地址下载文件并保存至对应目录的实现
2020/11/15 Python
CSS3实现伪类hover离开时平滑过渡效果示例
2017/08/10 HTML / CSS
Camper鞋西班牙官方网上商店:西班牙马略卡岛的鞋类品牌
2019/03/14 全球购物
《红军不怕远征难》教学反思
2014/04/14 职场文书
课前一分钟演讲稿
2014/08/26 职场文书
2019年12月24日平安夜祝福语集锦
2019/12/24 职场文书
Python基础详解之描述符
2021/04/28 Python