用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 相关文章推荐
56.com视频采集接口程序(PHP)
Sep 22 PHP
PHP 实用代码收集
Jan 22 PHP
PHP计算2点经纬度之间的距离代码
Aug 12 PHP
php异步多线程swoole用法实例
Nov 14 PHP
thinkphp缓存技术详解
Dec 09 PHP
Yii2中OAuth扩展及QQ互联登录实现方法
May 16 PHP
php实现登陆模块功能示例
Oct 20 PHP
PHP获取访问页面HTTP状态码的实现代码
Nov 03 PHP
详解PHP用substr函数截取字符串中的某部分
Dec 03 PHP
ThinkPHP中图片按比例切割的代码实例
Mar 08 PHP
PHP时间函数使用详解
Mar 21 PHP
PHP安装扩展mcrypt以及相关依赖项深入讲解
Mar 04 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
1.PHP简介
2006/10/09 PHP
php中var_export与var_dump的区别分析
2010/08/21 PHP
PHP读取网页文件内容的实现代码(fopen,curl等)
2011/06/23 PHP
利用PHP生成静态HTML文档的原理
2012/10/29 PHP
利用PHP fsockopen 模拟POST/GET传送数据的方法
2015/09/22 PHP
Js callBack 返回前一页的js方法
2008/11/30 Javascript
自定义Angular指令与jQuery实现的Bootstrap风格数据双向绑定的单选与多选下拉框
2015/12/12 Javascript
js倒计时简单实现方法
2015/12/17 Javascript
ES2015 Symbol 一种绝不重复的值
2016/12/25 Javascript
使用jQuery,Angular实现登录界面验证码详解
2017/04/27 jQuery
JavaScript原型对象、构造函数和实例对象功能与用法详解
2018/08/04 Javascript
JS实现移动端双指缩放和旋转方法
2019/12/13 Javascript
Vue实现剪切板图片压缩功能
2020/02/04 Javascript
[43:24]2018DOTA2亚洲邀请赛3月29日 小组赛A组 LGD VS Liquid
2018/03/30 DOTA
Python实现读取txt文件并画三维图简单代码示例
2017/12/09 Python
详解Pytorch 使用Pytorch拟合多项式(多项式回归)
2018/05/24 Python
python3 cvs将数据读取为字典的方法
2018/12/22 Python
Python面向对象进阶学习
2019/05/21 Python
解决pycharm 工具栏Tool中找不到Run manager.py Task的问题
2019/07/01 Python
python删除列表元素的三种方法(remove,pop,del)
2019/07/22 Python
浅谈python已知元素,获取元素索引(numpy,pandas)
2019/11/26 Python
Python多线程threading join和守护线程setDeamon原理详解
2020/03/18 Python
如何用Matlab和Python读取Netcdf文件
2021/02/19 Python
css 如何让背景图片拉伸填充避免重复显示
2013/07/11 HTML / CSS
澳大利亚潮流尖端的快时尚品牌:Cotton On
2016/09/26 全球购物
Lampegiganten丹麦:欧洲领先的照明网上商店
2018/04/25 全球购物
台湾租车首选品牌:IWS艾维士租车
2019/05/03 全球购物
Lookfantastic澳大利亚官网:英国知名美妆购物网站
2021/01/07 全球购物
放假通知格式
2015/04/14 职场文书
幸福终点站观后感
2015/06/04 职场文书
创业计划书之家教中心
2019/09/25 职场文书
解决Nginx 配置 proxy_pass 后 返回404问题
2021/03/31 Servers
html+css合并表格边框的示例代码
2021/03/31 HTML / CSS
详解CSS不定宽溢出文本适配滚动
2021/05/24 HTML / CSS
Python学习之包与模块详解
2022/03/19 Python
修改Nginx配置返回指定content-type的方法
2022/09/23 Servers