如何开发一个虚拟域名系统

 更新时间:2016年11月25日 16:33  点击:1769
大家在使用诸如yourname.yeah.net这样的简记域名时都感到十分方便,有很多人在想:我要是能让自己的服务器也能够实现简记域名就好了。其实这并不复杂。看完了本文,你也可以做一个简记域名系统。
  简记域名系统的关键技术在于:实现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文件,去掉
  设置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脚本。我们刚才已经在图中详细的说明了整个的原理,所以写一个重新定向的程序就不是很难了。
树型目录看起来新颖别致,而网上的大多是JAVASCRIPT和PHP的结合,本人这一个是用全用PHP4写的,用了SESSION功能,请大家看了多提意见。(本人在WIN98/PWS/PHP4下测试通过)
<?
// 2001/02/23
//ZHANGHEXUN
//树型目录
session_start(); //开始一个SESSION
if (!session_is_registered("$office_action")){
$office_action=0;
session_register("$office_action");//注册一个SESSION
}
if(!session_is_registered("$pho_action")){
$pho_action=0;
session_register("$pho_action");
}
if (!session_is_registered("$web_action")){
$web_action=0;
session_register("$web_action");
}
$office=array('wps','office2000','北大方正'); //办公之星项目
$pho=array('photoshop','3D MAX','fish','Firworks');
$web=array('php','asp','jsp','html','javascript','perl');
?>
<HTML><HEAD><TITLE>张贺勋的树型目录</TITLE>
<META content="text/html; charset=gb2312" http-equiv=Content-Type></HEAD>
<BODY>
<TABLE border=0 width="100%" bgcolor=#8cc9ec cellpadding=1 cellspacing=1>
<TBODY>
<TR>
<TD width=180 bgcolor=#8cc9ec>
<TABLE>
<TR><TD><FONT class=font6>学习中心</FONT></TD></TR>
<TR><TD>·<A href=<?
if ($acte==1000){
$office_action= 1-$office_action;
}
print ""$php_self?acte=1000&office_action=$office_action"";
?>>办公之星</a><br>
<?if ($office_action==1){
print"<talbe> <tbody> <tr> ";
for ($i=0;$i<count($office);$i++){
print"<td>&nbsp&nbsp&nbsp|-<a href="$php_self?acte=".(1005+$i*5)."">$office[$i]</a></td></tr>";
}
print"</tbody></table> ";
使用者状态管理(session support)是 PHP 4.0 一个让大家期待已久的新功能。在 PHP 3.0 的时代,程序设计员必须使用其它人写好的函式库来实作状态管理功能,或者就干脆放弃这项功能不用算了。而状态管理功能的缺乏事实上是 PHP 3.0 最让人感到失望的地方之一。不过现在状况已经得到改变,从 PHP 4.0 的早期测试版开始,使用者状态管理便已经成为 PHP 内建的功能之一了。
你可以使用状态管理功能来管理使用者从进入网站开始一直到离开网站为止这段期间内的所有相关变量(只要使用者没有离开网站,那么这些变量就都可以取用,不会因为使用者离开某个单一页面而造成资料消失),而不需要储存许多cookie 或者使用隐藏窗体字段,甚至将这些变量储存在数据库里面,造成数据库服务器的大量负荷。
一旦你在网站中的某一页激活状态管理,PHP 引擎便会开始纪录使用者状态(如果对这个使用者来说系统还没开始纪录该访问者的状态的话),或者继续纪录某个先前已经激活的使用者状态。要激活 PHP 的状态管理功能,你可以使用下面这个语法:
session_start();
一旦激活状态管理,PHP 会通过 cookie 传送一个独一无二的状态代码(这个代码看起来会像是:940f8b05a40d5119c030c9c7745aead9)给使用者,同时在服务器这端,PHP 引擎会自动产生一个档名与状态代码相对应的暂存文本文件(如:sess_940f8b05a40d5119c030c9c7745aead9),该档案会用来储存程序设计员在这个使用者状态纪录中所注册的所有变量。
谈到使用者状态管理,最常使用的例子便是一个页面存取计数器(access counter)了:现在我就开始教大家撰写 PHP 程序代码。
特别注意
在你尝试激活使用者状态纪录之前,千万不能够输出任何内容(不能有空格,TAB 甚至换行等等空格符,也不能有任何 HTML 卷标,任何内容都不行)给浏览器。这是因为状态管理相关函数会送出 HTTP 表头(header)信息给浏览器,如果在送出 HTTP 表头信息给浏览器之前已经有其它内容被输出的话,系统将会出现错误讯息。
如果该使用者的状态管理尚未被激活的话,下面这行程序便会激活该使用者的状态管理:
session_start();
接下来,注册一个名为count的变量:
session_register('count');
一旦你注册了一个变量,PHP 便会在从使用者进入网站一直到离开网站的整个浏览过程中自动替你维护这个变量的值,你可以随时取用这些注册过的变量。刚注册好的变量并没有指定任何值给它,不过一旦我们增加 count 变量的值,它的值便会是 1 了:
<?php

// created by joe lumbroso
// see some other good php3 scripts
// goto http://www.dtheatre.com/scripts
echo "<font color="red"><blink><b>Pinging</b></blink></font><br>";
$to_ping = "dtheatre.com";
$count = 3;
$psize = 65;
echo " Please be patient, this can take a few moments... <br><br>";
flush();
while (1) {
?>
<pre>
<?
exec("ping -c $count -s $psize $to_ping", $list);
for ($i=0;$i < count($list);$i ) {
print $list[$i]." ";
}
?>
</pre>
<?
flush();
sleep(3);
}
?>


首先声明,写此文时,我对这个也不懂,只是自己从php.net上下了例子,试着做了一下,而且是在 win2000 apache php4p12配置下. 具体步骤如下: 一、安装好JVM(java virtual machine)(我用的是jdk122)

当然,您不一定要用jdk122,甚至不用jdk,用其它的,比如:
JVM=Kaffe 1.0.4 (as delivered with OS), OS=Redhat Linux 6.1
JVM=Kaffe 1.0.5 (built from source), OS=Redhat Linux 6.1
JVM=IBM 1.1.8, OS=Redhat Linux 6.1
JVM=Blackdown 1.2.2 RC4, OS=Redhat Linux 6.1
JVM=Sun JDK 1.1.8, OS=Windows NT 4/win2000
但是,在这里我只讲我的做法,其它的我没有试过,不要问我,这里要特别注意的是, 根据php官方站点的说明,竟然不支持jdk122 linux
二、设置环境变量
在win2000中"我的电脑"->"属性"->"高级"->"环境变量"
设置JAVA_HOME
为:jdk路径,比如我的jdk122装在e:jspjdk122下,那么就设置为e:jspjdk122
三、下载相关文件(如果您没有的话)
下载地址:http://www.php.net/downloads.php
我下载了:php-4.0.1-Win32-java-jdk122.zip文件,解压后有几个例子,并且有:php_java.dll和php_java.jar文件.
四、配置php.ini文件
[java]
java.class.path=E:PHP4php_java.jar
java.home=E:jspjdk122in
extension=php_java.dll
java.library.path=E:PHP4ext
java.library=E:Program FilesJavaSoftJRE1.2inclassicjvm.dll
以上是我的配置,说明一下,我的php4在e:php4目录下,我的所有扩充的dll文件 放在e:php4ext目录下,当然php_java.dll也就应该copy到这个目录了.最后确认你的 win2000下有jvm.dll文件,如果没有,安装一下visual studio就可以了(我用装了个VC 6,所以不用考虑了)
五、测试
运行phpinfo()就可以看到有"java"了,如果没有,说明你没有成功.它的显示如下:
java
Directive Local Value Master Value
java.class.path
E:PHP4php_java.jar E:PHP4php_java.jar
java.home
E:jspjdk122in E:jspjdk122in
java.library
E:Program FilesJavaSoftJRE1.2inclassicjvm.dll jvm.dll
java.library.path
E:PHP4ext no value
六、测试例子
我用的是下载的文件中包含的例子:jver.php,如果成功,将有如下结果:
Java version=1.2.2
Java vendor=Sun Microsystems Inc.
OS=Windows NT 5.0 on x86
星期三, 七月 19, 2000 at 10:32:53 下午 GMT 08:00


[!--infotagslink--]

相关文章

  • vscode搭建STM32开发环境的详细过程

    这篇文章主要介绍了vscode搭建STM32开发环境的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-05-02
  • 详解nginx同一端口监听多个域名和同时监听http与https

    这篇文章主要介绍了详解nginx同一端口监听多个域名和同时监听http与https的相关资料,需要的朋友可以参考下...2017-07-06
  • 安卓开发之Intent传递Object与List教程

    下面我们一起来看一篇关于 安卓开发之Intent传递Object与List的例子,希望这个例子能够为各位同学带来帮助。 Intent 不仅可以传单个的值,也可以传对象与数据集合...2016-09-20
  • php微信公众账号开发之五个坑(二)

    这篇文章主要为大家详细介绍了php微信公众账号开发之五个坑,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-10-02
  • 如何设计一个安全的API接口详解

    在日常开发中,总会接触到各种接口,前后端数据传输接口,第三方业务平台接口,下面这篇文章主要给大家介绍了关于如何设计一个安全的API接口的相关资料,需要的朋友可以参考下...2021-08-12
  • 微信开发生成带参数的二维码的讲解

    在微信公众号平台开发者那里,在“账号管理”那里,有一项功能是“生成带参数的二维码”,通过这儿生成的二维码,只要通过微信扫一扫之后,会把事件自动推送到微...2016-05-19
  • 分享我对JS插件开发的一些感想和心得

    这篇文章主要给大家分享我对JS插件开发的一些感想和心得的相关资料,需要的朋友可以参考下...2016-02-09
  • Chrome插件开发系列一:弹窗终结者开发实战

    从这一节开始,我们将从零开始打造我们的chrome插件工具库,第一节我们将讲一下插件开发的基础知识并构建一个简单但却很实用的插件,在构建之前,我们先简单的了解一下插件以及插件开发的基础知识...2020-10-03
  • 一篇文章带你搞懂Vue虚拟Dom与diff算法

    这篇文章主要给大家介绍了关于Vue虚拟Dom与diff算法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-08-26
  • PHP JS Ip地址及域名格式检测代码

    PHP IP地址格式检测函数复制代码 代码如下:function checkIp($ip){ $ip = str_replace(" ", "", $ip); $ip = strtolower($ip); $ip= str_replace("http://", "", $ip); $ip= str_replace("https://", ""...2013-10-04
  • Cocos2d-x UI开发之CCControlColourPicker控件类使用实例

    这篇文章主要介绍了Cocos2d-x UI开发之CCControlColourPicker控件类使用实例,本文代码中包含大量注释来讲解CCControlColourPicker控件类的使用,需要的朋友可以参考下...2020-04-25
  • 详解微信开发中snsapi_base和snsapi_userinfo及静默授权的实现

    这篇文章主要介绍了详解微信开发中snsapi_base和snsapi_userinfo及静默授权的实现的相关资料,需要的朋友可以参考下...2017-03-13
  • C#域名解析简单实现方法

    这篇文章主要介绍了C#域名解析简单实现方法,可实现针对域名解析显示出主机名、IP地址、别名等功能,需要的朋友可以参考下...2020-06-25
  • Java开发SpringBoot集成接口文档实现示例

    这篇文章主要为大家介绍了Java开发SpringBoot如何集成接口文档的实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步...2021-10-28
  • Drupal8模块开发之区块和表单教程

    前页我们讲了 Drupal8模块开发之路由、控制器和菜单链接教程 ,现在我们将学习进一步开发Drupal8模块,区块和表单。 上一教程:Drupal8模块开发之路由、控制器和菜单链...2016-11-25
  • 24个ES6方法解决JS实际开发问题(小结)

    这篇文章主要介绍了24个ES6方法解决JS实际开发问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-01
  • Unity3D游戏开发数据持久化PlayerPrefs的用法详解

    在本篇文章里小编给大家整理了关于Unity3D游戏开发之数据持久化PlayerPrefs的使用的相关知识点内容,需要的朋友们参考下。...2020-06-25
  • 2015新版godaddy域名续费与过期域名赎回期限及赎回方法

    有许多的新手朋友不知道gd如何续费及过期了域名如何购买回来了,今天我们就一起来看看2015新版godaddy域名续费与过期域名赎回期限及赎回方法吧。 2015新版godaddy...2016-10-10
  • 玩转虚拟域名◎+

    玩转虚拟域名◎+ . 不知道大家最近上网是否发现一个新现象,就是有一些网站开始提供“username@server”的虚拟域名服务。由于“@”的魅力,大家纷...2016-11-25
  • Android 组件开发之带label的文本输入框(EditText)

    文章给大家介绍Android 组件开发之带label的文本输入框(EditText),有需要了解的朋友可参考,希望此教程对各位有所帮助。 在Android开发中,我们的Activity都不免要用...2016-09-20