自己动手做一个迷你型Linux操作系统

本 文要构建的这个迷你型的 Linux 系统只能在一台特定的单机上运行,如果读者朋友们有兴趣的话,在这个系统的基础上加以改进,是可以构建出通用的、可以在大多数常规 PC 机上即插即用的系统来的。但是这已经不在本文的话题之内了,读者朋友们如果有兴趣,可以通过我的电子邮件和我讨论其中的细节问题。

我 们的目标 Linux 系统运行在一台普通的 Intel 386 PC 机上,可以有硬盘,也可以不要硬盘,而用 Flash Disk 来代替。如果是用 Flash 盘的话,需要能够支持从 Flash 盘启动,而且 Flash 盘的大小要在 16M 字节或者以上。我们希望用户一开机启动,就直接进入 X Window 图形界面,运行事先指定好的程序。不需要用户输入用户名和密码进行登录。

我们设定的这个目标有点像一个 X Terminal 终端工作站。稍加改进,还可以做成干脆无盘的形式,也就是说,连 16M 的 Flash 盘也不要了。不过,这也超出了本文的话题了。读者朋友们如果有兴趣,可以来信和我进行讨论。

系统启动

因 为我们要考虑从 Flash 盘进行启动,所以我们选择用 LILO 作为我们的 Boot Loader,而不选用 GRUB。这是考虑到 GRUB 有较强的对硬盘和文件系统的识别能力,而 Flash 盘到底不是标准的硬盘,并且我们选用的文件系统 GRUB 又不一定认识,搞不好的话 GRUB 反会弄巧成拙。而 LILO 就简单的多了,它在硬盘开始的 MBR 写入一个小程序,这个小程序不经过文件系统,直接从硬盘扇区号,读出 Kernel Image 装入内存。这样,保险系数就大大增加。并且也给了我们自由选用文件系统的余地。那么,我们要如何安装 LILO 呢?

首 先,我们要找一块普通的 800M 左右的 IDE 硬盘,连在目标机器的 IDE 线上。这样在我们的目标机器上,IDE1 上挂的是 Flash 盘,IDE2 上挂的是一块工作硬盘。我们用标准的步骤在 IDE2 的标准硬盘上装上一个 Debian GNU/Linux 系统。当然,如果读者朋友们手头没有 Debian,也可以装 Red Hat 系统。装好工作系统之后,要首先做一些裁减工作,把不必要的 Service 和 X Window 等等东西都删掉。这样做的目的是增进系统启动速度,因为我们在后面的工作中,肯定要不停的重新启动机器,所以启动速度对我们的工作效率是很关键的。

装 好工作系统之后,在 Falsh 盘上做一个 Ext2 文件系统,这个用 mke2fs 这个命令就可以完成。由于 Flash 盘是接在 IDE1 上的,所以在 Linux 里面,它的身份是 /dev/hda。本文作者在操作的时候,把整个 Flash 盘划分了一个整个的分区,所以,调用 mke2fs 的时候,处理的是 /dev/hda1。读者朋友们应该可以直接在 /dev/hda 上做一个 Ext2 文件系统,而不用事先分区。

在 Flash 盘上做好了文件系统之后,就可以把一个编译好的内核映像文件 vmlinuz 拷贝到 Flash 盘上了。注意,必须要先把这个 vmlinuz 映像文件拷贝到 Flash 盘上,然后才能在 Flash 盘上安装 LILO。不然的话,LILO 到时候可是会 LILILILI 打结巴的,因为它会找不到 Kernel Image 在 Flash 盘上的位置的,那样的话 Flash 盘也就启动不起来了。还有,如果读者朋友们在 Flash 盘上用的是一个压缩的文件系统的话,到时候 LILO 也会出问题,它虽然能正确的找到 Kernel Image 在硬盘上的起始位置,但是它却没有办法处理被文件系统重新压缩过的这个 Kernel Image,不知道该如何把它展开到内存中去。

把 Kernel Image 拷贝过去以后,我们就可以动手编辑一份 lilo.conf 文件,这份文件可以就放在工作系统上就行了。但是注意在 lilo.conf 中索引的文件名的路径可要写对。这些路径名都是在工作系统上看上去的路径名。比如,如果 Flash 盘 Mount 在 /mnt 目录下面,那么,在 lilo.conf 中,vmlinuz 的路径名就是 /mnt/vmlinuz。注意这一点千万不要搞错。不然的话,如果一不小心把工作系统的 LILO 给破坏掉了,那就麻烦了。编辑好了 lilo.conf,然后再运行 lilo 命令,注意,要告诉它用这个新的 lilo.conf 文件,而不要用 /etc/lilo.conf。

安 装好 LILO 之后,我们可以立即重新启动,测试一下。首先在 BIOS 里面,设置成从 IDE1 开始启动,如果我们看到 LILO 的提示符,按回车后还能看到 Kernel 输出的消息,这就算是 LILO 的安装成功了。记得这个操作的方法,以后每次我们更新 Flash 盘上的 Kernel Image,都记得要更新 LILO。也就是说,要重新运行一遍 lilo 命令。

编译内核

试 验成功 LILO 的安装以后,我们开始考虑编译一个新的内核。当然,要编译新的内核,我们首先要进入我们的工作系统。这里有两个办法进入工作系统,一是在 BIOS 里面设置从 IDE2 启动,当然,这就要求当初安装工作系统的时候,要把 LILO 安装在 /dev/hdb 上;另一个办法是还是从 IDE1 启动,不改变 BIOS 的设置,但是在看到 LILO 的提示符的时候,要键入 linux root=/dev/hdb1,最前面的 linux 是在 lilo.conf 里面定义的一个 entry,我们只采用这个 entry 所指定的 Kernel Image,但是用 /dev/hdb1 作为 root 文件系统。两个办法可能有的时候一个比另一个好,更方便一些。这就要看具体的情况了。不过,它们的设置并不是互相冲突的。

在 编译内核的时候,由于我们的内核是只有一台机器使用的,所以我们应该对它的情况了如指掌;另外一方面,为了减低不必要的复杂性,我们决定不用 kernel module 的支持,而把所有需要的东西直接编译到内核的里面。这样编译出来的内核,在一台普通的 586 主板上,把所有必要的功能都加进去,一般也不到 800K 字节。所以,这个办法是可行的。而且减低了 init scripts 的复杂程度。从运行方面来考虑,由于需要的 kernel 代码反正是要装载到内存中的,所以并不会引起内存的浪费。

在 我们的目标平台上,我们希望使用 USB 存储设备。还有一点要注意的,就是对 Frame buffer 的支持。这主要是为了支持 XFree86。一般说来,如果我们的显卡是 XFree86 直接支持的,那当然最好,也就不需要 frame buffer 的内核支持。但是如果 XFree86 不支持我们的显卡,我们可以考虑用 VESA 模式。但是 XFree86 的 VESA 卡支持运行起来不太漂亮,还有安全方面的问题,有时在启动和退出 X Window 的时候会出现花屏。所以我们可以采用 kernel 的 vesa 模式的 frame buffer,然后用 xfree86 的 linux frame buffer 的驱动程序。这样一般就看不到花屏的现象了,而且安全方面也没有任何问题。

devfs 也是我们感兴趣的话题。如果 kernel 不使用 devfs,那么系统上的 root 文件系统就要有 /dev 目录下面的所有内容。这些内容可以用 /dev/MAKEDEV 脚本来建立,也可以用 mknod 手工一个一个来建。这个方法有其自身的好处。但是它的缺点是麻烦,而且和 kernel 的状态又并不一致。相反的,如果使用了 devfs,我们就再也不用担心 /dev 目录下面的任何事情了。/dev 目录下面的项目会有 kernel 的代码自己负责。实际使用起来的效果,对内存的消耗并不明显。所以我们选择 devfs。

busybox

有 了 LILO 和 kernel image 之后,接下来,我们要安排 root 文件系统。由于 flash 盘的空间只有 16M 字节,可以说,这是对我们最大的挑战。这里首先要向大家介绍小型嵌入式 Linux 系统安排 root 文件系统时的一个常用的利器:BusyBox。

Busybox 是 Debian GNU/Linux 的大名鼎鼎的 Bruce Perens 首先开发,使用在 Debian 的安装程序中。后来又有许多 Debian developers 贡献力量,这其中尤推 busybox 目前的维护者 Erik Andersen,他患有癌症,可是却是一名优秀的自由软件开发者。

Busybox 编译出一个单个的独立执行程序,就叫做 busybox。但是它可以根据配置,执行 ash shell 的功能,以及几十个各种小应用程序的功能。这其中包括有一个迷你的 vi 编辑器,系统不可或缺的 /sbin/init 程序,以及其他诸如 sed, ifconfig, halt, reboot, mkdir, mount, ln, ls, echo, cat ... 等等这些都是一个正常的系统上必不可少的,但是如果我们把这些程序的原件拿过来的话,它们的体积加在一起,让人吃不消。可是 busybox 有全部的这么多功能,大小也不过 100K 左右。而且,用户还可以根据自己的需要,决定到底要在 busybox 中编译进哪几个应用程序的功能。这样的话,busybox 的体积就可以进一步缩小了。

使 用 busybox 也很简单。只要建一个符号链接,比方 ln -s /bin/busybox /bin/ls,那么,执行 /bin/ls 的时候,busybox 就会执行 ls 的功能,也会按照 ls 的方式处理命令行参数。又比如 ln -s /bin/busybox /sbin/init,这样我们就有了系统运行不可或缺的 /sbin/init 程序了。当然,这里的前提是,你在 busybox 中编译进去了这两个程序的功能。

这里面要提出注意的一点是,busybox 的 init 程序所认识的 /etc/inittab 的格式非常简单,而且和常规的 inittab 文件的格式不一样。所以读者朋友们在为这个 busybox 的 init 写 inittab 的时候,要注意一下不同的语法。至于细节,就不在我们这里多说了,请大家参考 Busybox 的用户手册。

从启动到进入 shell

busybox 安装好以后,我们就可以考虑重新启动,一直到进入 shell 提示符了。这之前,我们要准备一下 /etc 目录下的几个重要的文件,而且要把 busybox 用到的 library 也拷贝过来。

用 ldd 命令,后面跟要分析的二进制程序的路径名,就可以知道一个二进制程序,或者是一个 library 文件之间的互相依赖关系,比如 busybox 就依赖于 libc.so 和 ld-linux.so ,我们有了这些知识,就可把动手把所有需要的 library 拷贝到 flash 盘上。由于我们的 flash 盘说大不大,说小倒也不小,有 16M 字节之多。我们直接就用 Glibc 的文件也没有太多问题。如果读者朋友们有特殊的需要,觉得 Glibc 太庞大了的话,可以考虑用 uClibc,这是一个非常小巧的 libc 库,功能当然没有 Glibc 全,但是足够一个嵌入式系统使用了。本文就不再介绍 uClibc 了。

库 程序拷贝过来以后,我们就可以考虑系统启动的步骤了。启动的时候,先是 lilo,接下来就是 kernel,kernel 初始化之后,就调用 /sbin/init,然后由 init 解释 /etc/inittab 运行各种各样的东西。inittab 会指导 init 去调用一个最重要的系统初始化程序 /etc/init.d/rcS,我们将要在 rcS 中完成各个文件系统的 mount,此外,还有在 rcS 中调用 dhcp 程序,把网络架起来。rcS 执行完了以后,init 就会在一个 console 上,按照 inittab 的指示开一个 shell,或者是开 getty + login,这样用户就会看到提示输入用户名的提示符。我们这里为了简单起见,先直接进入 shell,然后等到调试成功以后,再改成直接进入 X Window。

关于 inittab 的语法,我们上面已经提到过了,希望读者朋友们去查权威的 busybox 的用户手册。这里,我们先要讲一下文件系统的构成情况。

安排文件系统

大 家已经看到,我们的 root 文件系统为了避免麻烦,用的是标准的 ext2 文件系统。由于我们的硬盘空间很小,只有不到 16M,而且我们还要在上面放上 X Window,所以,如果我们全部用 ext2 的话,Flash 盘的有限空间会很快耗尽。我们唯一的选择是采用一个适当的压缩文件系统。考虑到 /usr 目录下面的内容在系统运行的时候,是不需要被改写的。我们决定选择只读的压缩文件系统 cramfs 来容纳 /usr 目录下面的全部内容。

cramfs 是 Linus Torvalds 本人开发的一个适用于嵌入式系统的小文件系统。由于它是只读的,所以,虽然它采取了 zlib 做压缩,但是它还是可以做到高效的随机读取。既然 cramfs 不会影响系统读取文件的速度,又是一个高度压缩的文件系统,对于我们,它就是一个相当不错的选择了。

我 们首先把 /usr 目录下的全部内容制成一个 cramfs 的 image 文件。这可以用 mkcramfs 命令完成。得到了这个 usr.img 文件之后,我们还要考虑怎样才能在系统运行的时候,把这个 image 文件 mount 上来,成为一个可用的文件系统。由于这个 image 文件不是一个通常意义上的 block 设备,我们必须采用 loopback 设备来完成这一任务。具体说来,就是在前面提到的 /etc/init.d/rcS 脚本的前面部分,加上一行 mount 命令:

mount -o loop -t cramfs /usr.img /usr

这 样,就可以经由 loopback 设备,把 usr.img 这个 cramfs 的 image 文件 mount 到 /usr 目录上去了。哦,对了,由于要用到 loopback 设备,读者朋友们在编译内核的时候,别忘了加入内核对这个设备的支持。对于系统今后的运行来说,这个 mount 的效果是透明的。cramfs 的压缩效率一般都能达到将近 50%,而我们的系统上绝大部分的内容是位于 /usr 目录下面,这样一来,原本可能要用到 18M 的 Flash 盘,现在可能只需要 11M 就可以了。一个 14M 的 /usr 目录,给压缩成了仅仅 7M。

上 面考虑了压缩问题,下面还要考虑到,Flash 盘毕竟不像普通硬盘,多次的擦写毕竟不太好,所以我们考虑,在需要多次擦写的地方,使用内存来做。这个任务,我们考虑用 tmpfs 来完成。至于 tmpfs 和经典的 ramdisk 的比较,我们这里就不多说了。一般说来,tmpfs 更加灵活一些,tmpfs 的大小不像 ramdisk,可以顺着用户的需要增长或者缩小。我们选择把 /tmp、/var 等几个目录做成 tmpfs。这只需要我们在 /etc/fstab 里面加上两行类似下面的文字就可以了:

none /var tmpfs default 0 0

然后别忘了在 /etc/init.d/rcS 里面靠近开头的地方,加上 mount -a。这样,就可以把 /etc/fstab 里面指定的所有的文件系统都 mount 上来了。

X Window

进 行到这里,读者朋友们可能会以为,X Window 的安装可能会很复杂。其实不然,由于我们上面的架子搭好了,X Window 的安装非常简单,只需要把几个关键的程序拷贝过来就可以了。一般说来,只需要 /usr/X11R6 目录下面的 bin 和 lib 两个目录。然后,根据用户各自的需要,还可以做大幅的裁减。比如,如果你的局域网上有一个开放的 xfs 字体服务器的话,你可以把所有本地的字体都删掉,而使用远端的字体服务器。如果只需要运行有限的程序,别忘了把没有用的 library 都删掉。此外,还可以把多余的 X Window 的 driver 都删掉,只保留本机的显示卡所需要的 driver 就可以了。当然,这一关免不了要做多次测试。

其它技巧

如果你的工作系统式在另外一台机器上,通过局域网和本机互联的话,ssh 是一个不错的工具。此外,ssh 中带的 scp 用起来和普通的 cp 拷贝程序差不多,非常方便。用 ssh 和 scp 来共享文件,远程试验,你就可以不需要在办公室里跑来跑去的了。

如果你需要一个 MS Windows 上运行的 X Server 和 xfs 字体服务器,可以考虑包括在 Red Hat 的 Cygwin 工具箱中的 XFree86 系统。

七大步骤建立可靠的Linux操作系统

许多刚接触Linux的网络管理员发现,他们很难由指向点击式的安全配置界面转换到另一种基于编辑复杂而难以捉摸的文本文件的界面。本文列出七条管理员能够也应该可以做到的步骤,从而帮助他们建立更加安全的Linux服务器,并显著降低他们所面临的风险。

请任何大型机构的网络管理员对Linux和网络操作系统(如Windows NT或Novell)进行比较,可能他会承认Linux是一个内在更加稳定,扩展性更强的解决方案。可能他还会承认,在保护系统免受外部攻击方面,Linux可能是三者中最难配置的系统。

这种认识相当普遍——许多刚接触Linux的网络管理员发现,他们很难由指向点击式的安全配置界面转换到另一种基于编辑复杂而难以捉摸的文本文件的界面。多数管理员充分认识到他们需要手工设置阻碍和障碍,以阻止可能的黑客攻击,从而保护公司数据的安全。只是在他们并不熟悉的Linux领域内,他们不确定自己的方向是否正确,或该从何开始。

这就是本文的目的所在。它列出一些简易的步骤,帮助管理员保障Linux的安全,并显著降低他们面临的风险。本教程列出了七个这样的步骤,但您也可以在Linux手册和讨论论坛中发现更多内容。

保护根账户

Linux系统上的根账户(或超级用户账户)就像是滚石演唱会上的后台通行证一样——它允许您访问系统中的所有内容。因此,值得采取额外的步骤对它加以保护。首先,用密码命令给这个账户设置一个难以猜测的密码,并定期进行修改,而且这个密码应仅限于公司内的几个主要人物(理想情况下,只需两个人)知晓。

然后,对/etc/securetty文件进行编辑,限定能够进行根访问的终端。为避免用户让根终端“开放”,可设置TMOUT当地变量为非活动根登录设置一个使用时间;并将HISTFILESIZE当地变量设为0,保证根命令记录文件(其中可能包含机密信息)处于禁止状态。最后,制订一个强制性政策,即使用这个账户只能执行特殊的管理任务;并阻止用户默认以根用户服务登录。

提示:关闭这些漏洞后,再要求每一个普通用户必须为账户设立一个密码,并保证密码不是容易识别的启示性密码,如生日、用户名或字典上可查到的单词。

安装一个防火墙

防火墙帮助您过滤进出服务器的数据包,并确保只有那些与预定义的规则相匹配的数据包才能访问系统。有许多针对Linux的优秀防火墙,而且防火墙代码甚至可直接编译到系统内核中。首先应用ipchains或iptables命令为进出网络的数据包定义输入、输出和转寄规则。可以根据IP地址、网络界面、端口、协议或这些属性的组合制订规则。这些规则还规定匹配时应采取何种行为(接受、拒绝、转寄)。规则设定完毕后,再对防火墙进行详细检测,保证没有漏洞存在。安全的防火墙是您抵御分布式拒绝服务(DDoS)攻击这类常见攻击的第一道防线。

使用OpenSSH处理网络事务

在网络上传输的数据安全是客户-服务器构架所要处理的一个重要问题。如果网络事务以纯文本的形式进行,黑客就可能“嗅出”网络上传输的数据,从而获取机密信息。您可以用OpenSSH之类的安全壳应用程序为传输的数据建立一条“加密”通道,关闭这个漏洞。以这种形式对连接进行加密,未授权用户就很难阅读在网络主机间传输的数据。

禁用不必要的服务

大多数Linux系统安装后,各种不同的服务都被激活,如FTP、telnet、 UUCP、ntalk等等。多数情况下,我们很少用到这些服务。让它们处于活动状态就像是把窗户打开让盗贼有机会溜进来一样。您可以在 /etc/inetd.conf或/etc/xinetd.conf文件中取消这些服务,然后重启inetd或xinetd后台程序,从而禁用它们。另外,一些服务(如数据库服务器)可能在开机过程中默认启动,您可以通过编辑/etc/rc.d/*目录等级禁用这些服务。许多有经验的管理员禁用了所有系统服务,只留下SSH通信端口。

使用垃圾邮件和反病毒过滤器

垃圾邮件和病毒干扰用户,有时可能会造成严重的网络故障。Linux有极强的抗病毒能力,但运行Windows的客户计算机可能更易受病毒攻击。因此,在邮件服务器上安装一个垃圾邮件和病毒过滤器,以“阻止”可疑信息并降低连锁崩溃的风险,会是一个不错的主意。

首先安装SpamAssassin这个应用各种技术识别并标注垃圾邮件的一流开源工具,该程序支持基于用户的白名单与灰名单,提高了精确度。接下来,根据常规表达式安装用户级过滤,这个工具可对收件箱接收的邮件进行自动过滤。最后再安装Clam Anti-Virus,这个免费的反病毒工具整合Sendmail和SpamAssassin,并支持电子邮件附件的来件扫描。

安装一个入侵检测系统

  入侵检测系统(IDS)是一些帮助您了解网络改变的早期预警系统。它们能够准确识别(并证实)入侵系统的企图,当然要以增加资源消耗与错误线索 为代价。您可以试用两种相当知名的IDS:tripwire,它跟踪文件签名来检测修改;snort,它使用基于规则的指示执行实时的信息包分析,搜索并 识别对系统的探测或攻击企图。这两个系统都能够生成电子邮件警报(以及其它行为),当您怀疑您的网络受到安全威胁而又需要确实的证据时,可以用到它们。

定期进行安全检查

  要保障网络的安全,这最后一个步骤可能是最为重要的。这时,您扮演一个反派的角色,努力攻破您在前面六个步骤是建立的防御。这样做可以直接客观地对系统的安全性进行评估,并确定您应该修复的潜在缺陷。

  有许多工具可帮助您进行这种检查:您可以尝试用Crack和John the Ripper之类的密码破解器破译您的密码文件;或使用nmap或netstat来寻找开放的端口;还可以使用tcpdump探测网络;另外,您还可以利 用您所安装的程序(网络服务器、防火墙、Samba)上的公开漏洞,看看能否找到进入的方法。如果您设法找到了突破障碍的办法,其他人同样也能做到,您应 立即采取行动关闭这些漏洞。

  保护Linux系统是一项长期的任务,完成上述步骤并不表示您可以高枕无忧。访问Linux安全论坛了解更多安全提示,同时主动监控并更新系统安全措施。

Flash全屏效果

FLASH 全屏有二类四种:

1、不用浏览器直接用FLASH播放器播放的类型:
A、不显示FLASH播放器菜单栏的全屏(类似屏保效果),在第一帧处的Actions用FS Command 命令,在For standalone player 选项中选择fullscreen 为true 即可。运行中可按 ESC 退出或设一按钮在Actions上用FS command ,在For standalone player 选项中选择quit 也可退出。附带说一句:For standalone player上的所的选项只适合于用FLASH 播放器播放的情况。
B、如果仅是要使SWF文件占满FLASH播放器的窗口,什么也不需要做。直接击SWF文件。  以上一类全屏多用在非网络的运行。

2、第二类是在非FLASH 浏览器(如IE)中运行的全屏:
A、只占满浏览器:这种情况相对简单,不管您设的FLASH是否是800*600,只要在调用SWF文件的HTML文件中将WIDTH= HEIGHT= 后面的两个参数设为100即可,当然也可以在FLASH 导出HTML文件的设置中进行设置,方法是:打开FILE菜单:选Publish Settings 弹出导出设置对话框:在HTML标签下的Dimensions选项中下拉后选中Percent,并在WIDTH 和HEIGHT 框中填100,运行这个与SWF同名的HTML文件则与直接加语句同效。这种占满浏览器的全屏与SWF文件的设置无关,但最好设置的大小在700*400附近,否则容易导致图像特别是汉字的失真。
B、不显示浏览器菜单栏、工具栏的全屏。这种全屏稍稍复杂,也与FLASH的设置无关,但要借助Javacript来完成。方法是:在HTML文件中间加入以下代码:<script language="Javascript"><!-- window.open("nfd.swf","","fullscreen=1,menubar=no,width=800,height=600") //--> </script>    注:nfd.swf 改为您要播放的SWF文件名,也可以在SWF文件的第一帧Actions上的URL 命令上加上:javascript:window.open("nfd.swf","","fullscreen=1,menubar=no,width=800,height=600") 注:nfd.swf 改为您要播放的SWF文件名。

这种全屏也是类似屏保,用ALT+F4或设置按钮退出。把fullscreen设为=0,则只是不显示浏览器菜单栏、工具栏的全屏。用FLASH 的 player 播放时,即使没有设置 FSCOMMAND 也可以用 CTRL+F 的方式全屏播放。

whois概览

一. WHOIS的概念

1.1什么是“WHOIS”
“WHOIS”是当前域名系统中不可或缺的一项信息服务。在使用域名进行Internet冲浪时,很多用户希望进一步了解域名、名字服务器的详细信息,这 就会用到WHOIS。对于域名的注册服务机构(registrar)而言,要确认域名数据是否已经正确注册到域名注册中心(registry),也经常会 用到WHOIS。直观来看,WHOIS就是链接到域名数据库的搜索引擎,一般来说是属于网络信息中心(NIC)所提供和维护的名字服务之一。

1.2 WHOIS系统组成

根据IETF标准 要求,WHOIS服务一般由WHOIS系统来提供。WHOIS系统是一个Client/Server系统。其中Client端主要负责:
1)提供访问WHOIS系统的用户接口;
2)生成查询并将其以适当的格式传送给Server;
3)接收Server传回的响应,并以用户可读的形式输出。

Server端则主要负责接收Client端的请求并发回响应数据。Internet上基于TCP协议的基本服务都有自己默认的TCP端口号,象HTTP 服务的默认端口号为80,FTP服务的默认端口号为21等。同样作为Internet上核心服务之一的WHOIS服务,其Server端默认监听43号 TCP端口,接收查询请求并产生响应。一般来说,Server端可以接收三种类型的信息查询:联系人、主机和域名。对于同一查询,Server端的输出应 该具有一致性和稳定性。

1.3 WHOIS工作过程
WHOIS服务是一个在线的“请求/响应”式服务。WHOIS Server运行在后台监听43端口,当Internet用户搜索一个域名(或主机、联系人等其他信息)时,WHOIS Server首先建立一个与Client的TCP连接,然后接收用户请求的信息并据此查询后台域名数据库。如果数据库中存在相应的记录,它会将相关信息如 所有者、管理信息以及技术联络信息等,反馈给Client。待Server输出结束,Client关闭连接,至此,一个查询过程结束。

二. WHOIS的历史及其发展

域名系统理论的建立和应用对于Internet而言具有里程碑式的意义,因而早在ARPANet时代,域名信息就备受网络用户的关注。位于美国加州 Menlo Park的斯坦福研究院(Stanford Research Institute,SRI)在20世纪80年代初行使着DDN网络信息中心(Network Information Center,NIC)的职责,在这里工作的Ken Harrenstien和Vic White等人敏感地意识到提供已注册域名信息的查询对于NIC而言是一项非常重要的工作,于是便开始着手建立WHOIS系统,并将其工作成果提交给 IETF 。经过Ken Harrenstien等人的改进和修改,NICNAME/WHOIS理论得以进一步完善,成为Internet上的标准服务之一 。其中,NICNAME是WHOIS服务在TENEX, TOPS-20和一部分UNIX系统上的叫法。因为ARPANet上主机数目有限,此时的WHOIS服务主要通过位于SRI的中央数据库来维护。

这以后几乎所有的UNIX版本都将WHOIS作为TCP/IP协议栈中的上层应用协议,并实现了著名的客户端程序whois。在绝大多数UNIX和类 UNIX系统中键入man 1 whois,都会得到whois客户端程序的使用帮助。同样,用户只要telnet到运行WHOIS Server的43端口,敲入所需查询的信息,也能得到相应的信息反馈。

随着Internet的急速膨胀,人们意识到集中式的WHOIS Server越来越不能够满足网络用户的需求,于是分布式就成了WHOIS Server的主要发展方向。“Referral WHOIS”(简称为RWhois) 就是这个方向上的研究成果,其主要思路是利用分布式的数据库来维护众多的域名、主机等信息,用referral来指示client经由网络上的多个的 Server最后连到所查询信息的权威WHOIS Server。另一方面,IETF成立了Whois and Network Information Lookup Service Working Group(WNILS)来研究将本地WHOIS服务进行扩展和标准化,并称之为WHOIS++ 。

计算机和网络通信技术在不断发展,WHOIS系统新的功能也在不断增加。比如多语言功能,支持更多的字符集,结构化数据,更强劲的表达式搜索,更安全的数 据连接,更友好的用户界面等等。上世纪90年代以来,Web应用迅速普及,通过Web系统进行域名信息的查询已经成为主流趋势,各级域名注册管理机构都实 现了其基于Web的WHOIS系统,Client端多以网页为主的形式提供。如InterNIC的WHOIS主页:

http://www.internic.net/whois.html
。这样的界面对于普通Internet用户而言更加友好直观,清晰易读。

三. CNNIC WHOIS

3.1 CNNIC WHOIS系统
中国互联网络信息中心(China Internet Network Information Center ,简称CNNIC)是经我国国务院主管部门批准授权,行使我国国家互联网络信息中心职责的管理和服务机构。作为我国的域名体系注册管理机构,CNNIC也 提供了所辖范围内域名信息查询的WHOIS服务。
当前,能注册在CNNIC域名数据库中的域名有三种:

1)CN域名:以.cn结尾的二级域名和三级域名(edu.cn除外),如cnnic.cn、sina.com.cn等;
2)中文域名:至少含有一个中文文字,由中文、字母(A-Z,a-z,大小写等价)、数字(0-9)或符号(-)和域名层次分隔符“.”(或者中文的“。”)组成,最多不超过20个字符的字符串,如中国互联网络信息中心.网络、人民日报.中国、新浪.公司等;
3)通用网址:由中文、字母(A-Z,a-z,大小写等价)、数字(0-9)或符号(-)组成,最多不超过31个字符的字符串,并且不含域名分隔符“.”,如:中国互联网络信息中心、CNNIC等。

相应的,CNNIC WHOIS服务也由三个系统构成:

1).cn域名 WHOIS系统(http://ewhois.cnnic.cn);
2)中文域名WHOIS系统(http://cwhois.cnnic.cn);
3)通用网址WHOIS系统(http://seal.cnnic.cn)。

当前我国有的注册服务机构也提供WHOIS服务,但对于注册在CNNIC的域名等信息,这些注册服务机构的信息来源最终还是CNNIC的WHOIS系统。所以,CNNIC的WHOIS在所辖域内是最权威的。

3.2 CNNIC WHOIS的使用

3.2.1 .cn域名WHOIS查询
使用这个WHOIS系统,Internet用户可以查询除.edu.cn 之外所有注册在CNNIC域名数据库中以.cn结尾的英文域名。只要在“域名查询”栏中输入以.cn结尾的英文域名字符串,然后回车,即可得到查询结果。

如果查询的域名不在CNNIC域名数据库中,比如错误键入了.com或.net等结尾的域名,系统将会显示“你所查询的信息不属于本注册机构”。对于涉 及到著名企业的单位名称、驰名商标等的域名,CNNIC会进行保护性预留,查询这类域名系统会声明“经主管部门批准您申请的域名已经被列入限制注册名 单”。如果所查询的域名还没有注册,或者域名因为不同的理由被CNNIC禁止查询,系统会显示“你所查询的信息不存在”。

同时,按照惯例,该系统还提供注册在CNNIC域名数据库中的联系人信息和主机信息查询,只要在“联系人查询”或“主机查询”栏中输入主机的域名或联系人号,然后回车,系统会返回相应信息。若输入有误,系统会提示“你所查询的信息不存在”。

3.2.2 中文域名WHOIS查询
使用这个系统,Internet用户可以查询注册在CNNIC域名数据库中的中文域名,域名后缀目前可以是“.cn”、“.中国”、“.公司”和“.网 络”四者之一。如果域名分隔符“.”不小心输成了中文句号“。”,系统会进行自动更正并返回正确的查询信息。一般来说,输入简体的中文域名,系统会将相应 的简繁体的中文域名信息都显示到客户端。

CNNIC对于诸如著名企业的单位名称、驰名商标、地理名称等的中文域名,如“北京.公司”,也会给予保护性预留。查询此类域名系统会说明:“该中文域 名已由中国互联网络信息中心预留”。如果查询的域名不在CNNIC数据库中,系统会显示“此域名没有被注册”。如果系统称“此域名不存在”,则有可能是因 为所查询的域名因为某种原因被禁止注册。

Internet用户也可以利用该系统进行联系人和主机信息的查询。

3.2.3 通用网址WHOIS查询
使用这个系统,Internet用户可以查询注册在CNNIC域名数据库中的通用网址相关信息。

若要查询CNNIC进行了保护性预留的通用网址,系统会通知“您查询的通用网址限制注册”;对于禁止注册的通用网址,系统则会显示“您所查询的通用网址不 存在”。如果系统声明“您查询的通用网址/联系人目前没有被注册”,则说明可以向相应的注册服务机构申请注册该通用网址。
使用该系统 Internet用户也可以查询到相关的联系人信息。只需键入所需查询的联系人姓名或联系人号,在其后的下拉列表中选择联系人所属的注册服务机构,回车, 系统就会返回相应信息。如果不清楚联系人属于哪个注册服务机构,也可以保持下拉列表为“全部”,系统会返回所有与输入相符的联系人信息。

综上,CNNIC的WHOIS系统能够在所管理的范围内,提供清晰易读的域名信息。同时CNNIC也在积极进取,不断完善WHOIS系统,努力为广大Internet用户和域名注册服务机构提供更加方便、准确、快捷的域名信息查询服务。

如何通过whois查询域名所有人的信息

查询国际顶级域名所有人的信息(域名后缀为.aero, .arpa, .biz, .com, .coop, .edu, .info, .int, .museum, .net, .org等),可以通过ICANN授权的域名注册商来查询,也可以直接到INTERNIC网站查询,不需要事先注册登记即可直接查询。网址是

  http://www.internic.com/whois.html

  要注意的是,通过有些域名这册商只能查询到在该注册商注册的域名的详细信息,如果在其他注册商注册的域名,只能得到“该域名已经被注册”以及注册商的信息,而无法查看域名注册人的详细信息。(通常需要注册用户才能使用这种查询服务)

  查询全球各个地理顶级域名是否已经被注册可以到uwhois.com网站查询(其中也包括国内域名.cn):

  http://www.uwhois.com/cgi/domains.cgi?User=NoAds

  如果只是查询国内域名的注册情况,就不用这么麻烦了,直接到CNNIC网站查询即可,而且可以获得全中文的域名注册人信息。网址是: 

  http://ewhois.cnnic.net.cn/index.jsp

  (输入要查询的国内域名,如yuming.cn 并按回车键——因为CNNIC网页上没有“查询”按钮)

什么是IDE硬盘?什么是SATA硬盘?

硬盘接口是硬盘与主机系统间的连接部件,作用是在硬盘缓存和主机内存之间传输数据。不同的硬盘接口决定着硬盘与计算机之间的连接速度,在整个系统 中,硬盘接口的优劣直接影响着程序运行快慢和系统性能好坏。从家用用户的角度出发,硬盘接口分为IDE、SATA两种规格,不过他们各自具有自身的优势和 特点,用户需要根据自身的情况来加以选择。 IDE接口硬盘及主板接口IDE接口硬盘一般就是我们俗称的并行规格的PATA硬盘,目前大多数台式存储系统采用的都是称为Ultra-ATA的并行总线 接口硬盘产品,这样的规格技术是自80年代以来一直被应用在桌上型系统作为主流的内部储存互连技术,由于运用领域十分广泛时间又较长,所以成熟的技术带来 的是大规模集成制造

的低成本和飞速发展的大容量。
由于长时间的没有改变,在数据的传输上来看,这种IDE接口硬盘显得有一些滞后,因为目前主流的PATA硬盘仅能支持ATA/100和ATA/133两种 数据传输规范,传输速率最高只能达到 每秒100或133MB,这仅可以满足目前一般情况下的大容量硬盘数据传输。另外,这类硬盘所使用的80-pin数据线在机箱内部杂而乱,它会阻碍空气在 机箱里的流动,从而影响到系统的散热。虽然劣势明显,不过对于一些原来老用户来说,由于原有的主板平台并不支持SATA接口,这种IDE接口的PATA大 容量硬盘还是首选,还有一些用户认为这类型的硬盘在技术上成熟、稳定,所以也选择这类型的PATA硬盘。
由英特尔、戴尔、希捷、Maxtor以及APT等厂商所组成serialata.org,推出了就硬盘而言的新技术规格,Serial ATA,它为串行接口,在IDF Fall 2001大会上,希捷宣布了Serial ATA 1.0标准,正式宣告了SATA规范的确立这也是硬件新近颁布的一种的标准。
在技术特点来看,不得不承认PATA硬盘在安装、传输速率及功耗、抗震、噪声等多方面都要逊于SATA硬盘。因为SATA硬盘它具有更快的外部接口传输速 度,数据校验措施更为完善,SATA 1.0规范规定的标准传输率可以达到150MB/S,这样可以充分发挥Serial ATA接口的性能优势,因为ATA100的理论数值是100MB/s,即便是ATA133也最高为133MB/s。另外在安装上首先SATA的连接线非常 方便,而且SATA最重要的特性就是支持热插拔。串行SATA方式通过更好的数据校验方式,信号电压低可以有效的减小各种干扰,从而大大提高数据传输的效 率,而且新式的SATA硬盘连接线也更加有利机箱内部的散热。
SATA并非只有优点,在缺点上也是显而易见,由于SATA规格还不十分成熟,这种类型的硬盘对外频要求要比并行规格硬盘高,如果用户有超频的情况这时一 定要注意,因为它就会常常出现找不到硬盘或数据损坏的情况。目前支持SATA 2.0的硬盘也已经推出,相信不久SATA 3.0也会出现在市场中,但并非标准越高就越好,就目前而言这种SATA2.0规范的硬盘主要还是针对服务器和网络存储应用,如普通消费者选择SATA 1.0规范的硬盘产品足以 一般PATA的硬盘传输速度有:
Ultra-ATA33
Ultra-ATA66
Ultra-ATA100
Ultra-ATA133
SATA硬盘传输速度有:
Ultra-ATA150

分辨是什么硬盘就下载一个测试软件:EVEREST Home Edition 2.20 可以非常的直接看到你目前的硬盘类型和传输速度

国标码、区位码、内码之间的关系

1. 输入码

汉字的字数繁多,字形复杂,常用的汉字有6000—7000个,比英文的26个字母要多得多。在计算机系统中使用汉字, 首先遇到的问题就是如何把汉字输入到计算机内。为了能直接使用西文标准键盘进行输入,必须为汉字设计相应的编码方法。汉字编码方法主要分为三类:数字编 码、拼音编码和字形编码。

⑴数字编码

数字编码就是用数字串代表一个汉字的输入,常用的是国标区位码。国标区位码将国家标 准局公布的的6763个两级汉字分成94个区,每个区定为94位,实际上是把汉字表示成二维表的形式,区码和位码各用两位十进制数字表示,因此,输入一个 汉字需要按键四次。例如,“中”字位于第54区48位,区位码为5448。

汉字在区位码表的排列是有规律的。在94个分区中,1—15区 用来表示字母、数字和符号,16—87区为一级和二级汉字。使用区位码方法输入汉字时,必须先在表中查找汉字并找出对应的代码,才能输入。数字编码输入的 优点是无重码,而且输入码和内部编码的转换比较方便,但是每个编码都是等长的数字串,代码难以记忆。

⑵拼音编码

拼音编码是以汉语读音为基础的输入方法。由于汉字同音字太多,输入重码率很高,因此,按拼音输入后还必须进行同音字选择,影响了输入速度。

⑶字形编码

字 形编码是以汉字的形状确定的编码。汉字总数虽多,但都是由一笔一划组成,全部汉字的部件和笔划是有限的。因此,把汉字的笔划部件用字母或数字进行编码,按 笔划书写的顺序依次输入,就能表示一个汉字,五笔字型、表形码等便是这种编码法,这种方法得缺点也是需要记忆很多的编码。五笔字型编码是最有影响的字形编 码方法之一。

2. 汉字国标交换码和机内码

西文处理系统的交换码和机内码均为ASCII,用一个字节表示,一般只用低七 位。1981年我国在国标GB2312-80制定了汉字交换码也称为国标交换码(简称国标码)。在国标码中,一个汉字用两个字节表示,每个字节也只用其中 的七位,每个字节的取值范围和94个可打印的ASCII字符的取值范围相同(21H-7EH),涵盖了一、二级汉字和符号。为了避免ASCII码和国标码 同时使用时产生二义性问题,大部分汉字系统一般都采用将国标码每个字节高位置“1”作为汉字机内码。这样既解决了汉字机内码与西文机内码之间的二义性,又 使汉字机内码与国标码具有极简单的对应关系。区位码、国标码和机内码之间的关系可以概括为(区位码的十六进制表示) 2020H=国标码,国标码 8080H=机内码,以汉字“大”为例,“大”字的区内码为2083,将其转换为十六进制表示为1453H,加上2020H得到国标码3473H,再加上 8080H得到机内码为B4F3H。

3. USC编码

为了统一地表示世界各国的文字,1993年中华人民共和国规定国家 标准(简称为GB 13000)采用国际标准化组织公布的“通用多八位编码字符集”的国际标准ISO/IEC 10646,简称UCS(Universal Code Set)。UCS包含了中、日、韩等国的文字,这一标准为包括汉字在内的各种正在使用的文字规定了统一的编码方案。该标准是用四个字节来表示每一个字符, 并相应地指定组、平面、行和字位。GB 13000规定的通用多八位编码字符集应被视为一个单一的实体。

整个编码字符集应被表达为包含128(一个字节的低七位即27=128)个组,其中每个组表示256(28=256)个平面。每一平面包含256行,每行有256个字位。四个字节共32位足以包容世界上所有的字符,同时也符合现代处理系统的体系结构。

第一个平面(00组中的00平面)称为基本多文种平面,它包含字母文字、音节文字及表意文字等。它分成四个区:

⑴A区:代码位置0000H—4DFFH(19903个字位)用于字母文字、音节文字及各种符号。

⑵I区:代码位置4E00H—9FFFH(20992个字位)用于中、日、韩(CJK)统一的表意文字。

⑶O区:代码位置A000H—DFFFH(16384个字位)留于未来标准化用。

⑷R区:代码位置E000H—FFFDH(8190个字位)作为基本多文种平面的限制使用区,它包括专用字符、兼容字符等各种符号。

如汉字的“大”国标码是3473H,在UCS的编码为00005927H,即在00组,00面,59H行,第27H字位上。

4. 汉字字形码

汉 字字形码是表示汉字字形的字模数据,通常用点阵、矢量函数等方式表示,用点阵表示字形时,汉字字形码一般指确定汉字字形的点阵代码。字形码也称字模码,它 是汉字的输出形式,随着汉字字形点阵和格式的不同,汉字字形码也不同。常用的字形点阵有16×16点阵、24×24点阵、48×48点阵等等。

字模点阵的信息量是很大的,占用存储空间也很大,以16×16点阵为例,每个汉字占用32(2×16=32)个字节,两级汉字大约占用256KB。因此, 字模点阵只能用来构成“字库”,而不能用于机内存储。字库中存储了每个汉字的点阵代码,当显示输出时才检索字库,输出字模点阵得到字形。

linux主要系统服务介绍

apmd--apmd用来监视系统用电状态,并将相关信息通过syslogd写入日志。也可以用来在电源不足时关机
arpwatch--用来维护以太网物理地址和ip地址的对应关系
atd--运行用户用at命令调度的任务。也在系统负荷比较低时运行批处理任务
autofs--当您需要时自动转载文件系统,而当您不需要时自动卸载
chargen--tcp版本的chargen server
chargen-udp--udp版本的chargen server
crond--周期地运行用户调度的任务。比起传统的unix版本添加了不少属性,而且更安全,配置更简单
daytime--tcp版本的daytime server
daytime-udp--udp版本的daytime server
echo--tcp版本的echo server
echo-udp--udp版本的echo server
eklogin--接受rlogin会话鉴证和用kerberos5加密的一种服务
finger--用于应答finger请求的服务
gpm--为文本模式下的linux程序提供了鼠标的支持。它也支持控制台鼠标的拷贝,粘帖操作以及弹出式菜单 (必须)
gssftp--接受可被kerberos5验证的ftp连接
httpd--http是著名的www服务器,可用来提供html文件以及cgi动态内容服务
identd--提供验证身份的方法
ipchains--ipchains包过滤防火墙
iptables--iptables包过滤防火墙
ipvsadm--调用ipvsadm来建立和维护ipvs路由选择表
isdn--启用isdn(综合服务数字网)服务
kadmin--更改在主控kdc中使用本机的kadmin工具,或透过kadmin服务来完成
kdcrotate--设置配置文件/etc/krb5.con中的kdcs表项
keytable--该程序的功能是转载您在/etc/sysconfig/keyboards里说明的键盘映射表
klogin--接受bsd方式的rlogin会话,但需要使用kerbeos5验证
kprop--是否允许kdc接收来的master kdc的升级
krb5-telnet--允许普通的telnet登陆,但也可使用kerberos5验证
krb524--是以改变kerberos5到kerberosIV的赁证
krb5kdc--开启kerberosIV和5所需的连接以获得赁证
kshell--接受rshell命令鉴证和用kerberos加密的服务
kudzu--运行硬件检测,并可选择性地设置硬件变化
lpd--lpd是系统打印守护程序,负责将lpr等程序提交给打印作业
netfs--负责装载/卸载nfs、samba、ncp文件系统
network--激活/关闭启动时的各个网络接口 (必须)
nfs--nfs是一个流行的基于tcp/ip网络的文件共享协议.该服务提供了nfs文件共享服务
nfslock--提供nfs文件上锁功能
nscd--该服务负责密码和组的查询,并且缓冲查询结果
portmap--portmap用来支持rpc连接,rpc被用于nfs以及nis等服务
postgresql--postgresql关系数据库引擎
random--保存和恢复系统的高质量随机数生成器,这些随机数是系统一些随机行为提供的
rlogin--rlogin程序服务,提供来自远程信任主机的注册功能
routed--该守护程序支持rip协议的自动ip路由表维护.rip主要使用在小型网络上,大一点的网络就需要复杂一点的协议
rsh--提供rcmd程序或者rsh程序的服务
rstatd--rstat协议允许网络上的用户获得同一网络上各机器的性能参数
rsync--对ftp服务的一个很好的附加,允许循环码求和校验等
rusersd--该服务使网络用户可以定位同一网络上的其他用户
rwalld--rwall协议允许远程用户向在同一系统中活跃着的终端发送消息,类似wall的本地行为
rwhod--允许远程用户获得运行rwho精灵的机器上所有已登录用户的列表,与finger类似
smb--启动和关闭smbd和nmbd精灵程序以提供smb网络服务
snortd--一个轻量级的网络入侵检测工具
swat--samba网络配置工具,可以通过流览器的901端口连接使用swat
syslog--syslog是操作系统提供一种机制,守护程序通常使用这些机制将各种信息写到各个系统日志文件 (必须)
telnet--提供telnet服务,使用未加密的用户/密码组进行验证
time--tcp版本的rfc 868 time server
time-udp--udp版本的rfc 868 time server
webmin--webmin是基于web的集系统管理与网络管理于一身的强大管理工具
xfs--在引导和关闭时启动和停上x字体服务,并可能重新生成字体表 (必须)
xinetd--因特网操作服务程序。提供类似于inetd+tcp_wrapper的功能,但是更加强大和安全,监控网络对各种它管理的服务的需求,并在要的时候启动相应的服务程序
ypbind--实现网络信息服务的服务器端
--------------------------------------------------------------------------------------------------
redhat 下常用服务介绍
anacron 不考虑系统downtime期间的cron服务
amd 自动安装NFS守候进程
apmd 高级电源管理
arpwatch 记录日志并构建一个在LAN接口上看到的以太网地址和IP地址对数据库
atd 用于at和batch的服务
autofs 自动安装管理进程automount,与NFS相关,依赖于NIS
crond 为Linux下自动安排的进程提供运行服务.
Gpm 提供字符模式下对鼠标的支持.
Keytable 用于装载键盘镜像
Kudzu 硬件探测器
Netfs 安装和卸载NFS、SAMBA和NETWARE网络文件系统
Network 激活已配置网络接口的脚本程序
Nfslock NFS锁定
Pcmcia 安装pcmcia卡(一般用于笔记本电脑)
Sshd OpenSSH服务器
Syslog 一个让系统引导时启动syslog和klogd系统日志守候里程的脚本
Xfs Xwindow字型服务器,为本地和远程X服务器提供字型集
Xinetd 支持多种网络服务的核心守候程序。

WINDOWS XP重置TCP/IP

方法1: 重置 命令:netsh int ip reset[log_file_name]


方法2:

1.进入安全模式

2. 打开注册表删除以下键值HKEY_LOCAL_MACHINE\System\GurrentrolSet\Services\Winsock HKEY_LOCAL_MACHINE\System\GurrentrolSet\Services\Winsock2

3.编辑%winroot%\inf的Nettcpip.inf:在[MS-TCPIP.PRIMARYLNSTALL]中,替换Charateristics=0xa0值为0x8o

4.在网络连接属性中,选择添加协议,选择通过磁盘,-〉c:\windows\inf,选择添加TCP\IP,则可以看到允许卸载TCP\IP,卸载TCP\IP,重起。

5.在网络连接属性中,选择添加协议,选择通过磁盘,-〉c:\windows\inf,选择TCP\IP,安装TCP\IP,重新启动。


如果方法1无法恢复修复用方法2

一次硬盘数据恢复

硬盘作为用户存储数据的主要场所,其最大的用途莫过于存储数据,但有时往往由于用户操作不甚等原因,造成用户数据的丢失。如果对于普通用户,数据对用户相对而言并不重要,那么丢了就丢了,没太大关系;但如果数据对用户很重要(对于这类用户,AWU推荐应经常备份数据),这时数据丢失了怎么办呢?此文就是通过一次对硬盘数据的恢复过程分析来简要说明一下硬盘数据恢复的大概方法,希望对大家恢复硬盘数据有一定的积极作用。

相关概念:

MBR(MAIN BOOT RECORD)即主引导记录区,它位于整个硬盘的0磁道0柱面1扇区,包括硬盘引导程序和分区表。

DBR (DOS BOOT RECORD)即操作系统引导记录区,通常位于硬盘的0磁道1柱面1扇区,是操作系统可直接访问的第一个扇区,它也包括一个引导程序和一个被称为BPB (BIOS PARAMETER BLOCK)的本分区参数记录表。每个逻辑分区都有一个DBR。

FAT(file allocation table)即文件分配表,是dos,windows9X系统的文件寻址格式,为了数据安全起见,FAT一般做两个,第二FAT为第一FAT的备份。

DIR 是DIRECTORY即根目录区的简写,DIR紧接在第二FAT表之后。

估计数据丢失原因:

1、安装多系统引导软件后,异常操作造成。

2、遭到某种病毒感染。 数据丢失前状态:2.5G 硬盘,原分区为:C:2G + D:500M,D盘装有重要数据。两分区均为FAT16格式。

数据丢失过程:

一次系统重启后,D盘丢失。

数据丢失后的操作:

该客户曾用FDISK重新分区,试图按原分区大小再造分区,未果。但没有格式化D盘,只格式化了C盘并重装系统。

客户的数据修复要求:

恢复D盘根目录下"数码相机"目录内所有文件。

所用工具:

NORTON DISK DOCTOR:diskedit.exe

数据修复过程:

一、 数据备份:主要包括物理0磁道各扇区,各分区逻辑0磁道,FAT表和根目录区等,再配以GHOST备份各分区的数据区。

二、 分析该硬盘的主引导扇区MBR(包括主分区表和引导程序)、各分区的引导扇区DBR、FAT表及根目录区。

由于已经重新分区并能顺利启动C盘(抛开病毒原因),故MBR的逻辑结构应该没问题,通过DISKEDIT察看MBR所在的0磁道第一扇区,证实估计正确,但现分区表与原分区表是否完全一致,还不能确定。

通过分区表,可以查找到各分区的引导扇区所在的物理位置,分析后可确定C盘的各项重要数据(引导扇区、第一FAT表、第二FAT表、根目录区)均没有异常,但D盘除了引导扇区DBR外、上诉的其他数据均无法对应,DBR之所以无异常,是因为重新分区的结果,而FAT1、FAT2和根目录区面目全非的原因,大致应该有两种可能:一是现分区与原分区不一致,导致数据对不上号;二是数据已被病毒破坏。

由于在察看MBR时,发现0磁道的其他扇区留有不明程序的残余代码,通过察看其中的一些显示信息,可以判定是某种多系统软件留下的,说明客户曾经安装过多系统管理软件。这样大致可以排除病毒破坏分区的可能,分区丢失应该是异常操作多系统管理软件引起的。

三、寻找原有分区根据前面的分析,由于客户在数据丢失后又进行了重新分区,而且估计现有的分区与原来的分区不一致,这样无疑加大了数据修复的难度,但幸好没有格式化D盘,因为如果单单只是FDISK,只会改写原硬盘的各分区的第一扇区,如果这个扇区不落在原分区的重要参数区(DBR、FAT、根目录)上,那么修复的成功率还是挺高的。接下来就是寻找原有D盘的重要数据区了,根据客户提供的资料可知,原D盘根目录下有一叫"数码相机"的子目录,于是用DISKEDIT提供的搜索功能,搜索"数码相机"对应的十六进制代码,可以找到原有D盘的根目录区。历时30分钟,通过过滤搜索结果,最终找到该根目录所在的扇区,然后顺藤摸瓜,向前翻过两个FAT表(根据经验大概400-500个扇区)找到原D盘的DBR所在的扇区,接着再向前翻63个扇区,找到原D盘的分区表,至此,最困难的问题攻克了。

四、 重建主分区表因为客户后来用FDISK重新建立的主分区表与原来的分区表并不一致,故必须手工重建原分区表,通过前面找到的原D盘分区表和原D盘的DBR,可以计算出主分区表。包括各分区的起始、结束扇区、分区大小、分区类型等。算出结果后,改写0磁道1扇区的主分区表。

五、 重启系统,出现原D盘,所有文件基本全部恢复。拷贝出"数码相机"目录,做好备份。通知客户取回数据。

有关本次案例的说明:

1、 数据备份时,不要过分相信ghost,ghost只认正确的分区,对于隐藏的分区它不会复制。对于不正确的分区,它会报告错误并停止复制过程。Ghost 并非一个纯粹意义上的全盘复制软件,它只复制那些FAT表上存在的文件,而非复制磁盘上所有的数据!

2、 走运的是,该客户重新分的D盘刚好比原D盘大几个磁道,故新的D盘分区表被建在原C盘最后端的数据区中。所以本次基本上可以说是100%恢复了原D盘的数据了。

3、 更走运的是,该客户没有重新格式化D盘,不然就不可能有那么高的恢复率了。

给读者的建议:

在硬盘数据出现丢失后,请立即联系当地的数据修复公司。最好不要再对硬盘进行写操作,那样会增大修复的难度,也影响到修复的成功率。

硬盘数据结构全面了解以及数据修复!

硬盘的数据结构
初买来一块硬盘,我们是没有办法使用的,你需要将它分区、格式化,然后再安装上操作系统才可以使用。一个完整硬盘的数据应该包括五部分:MBR,DBR,FAT,DIR区和DATA区。其中只有主引导扇区是唯一的,其它的随你的分区数的增加而增加。

主引导扇区

主引导扇区位于整个硬盘的0磁道0柱面1扇区,包括硬盘主引导记录MBR(Main Boot Record)和分区表DPT(Disk Partition Table)。其中主引导记录的作用就是检查分区表是否正确以及确定哪个分区为引导分区,并在程序结束时把该分区的启动程序(也就是操作系统引导扇区)调入内存加以执行。至于分区表,很多人都知道,以80H或00H为开始标志,以55AAH为结束标志,共64字节,位于本扇区的最末端。值得一提的是, MBR是由分区程序(例如DOS 的Fdisk.exe)产生的,不同的操作系统可能这个扇区是不尽相同。如果你有这个意向也可以自己去编写一个,只要它能完成前述的任务即可,这也是为什么能实现多系统启动的原因(说句题外话:正因为这个主引导记录容易编写,所以才出现了很多的引导区病毒)。

操作系统引导扇区

OBR (OS Boot Record)即操作系统引导扇区,通常位于硬盘的0磁道1柱面1扇区(这是对于DOS来说的,对于那些以多重引导方式启动的系统则位于相应的主分区/扩展分区的第一个扇区),是操作系统可直接访问的第一个扇区,它也包括一个引导程序和一个被称为BPB(BIOS Parameter Block)的本分区参数记录表。其实每个逻辑分区都有一个OBR,其参数视分区的大小、操作系统的类别而有所不同。引导程序的主要任务是判断本分区根目录前两个文件是否为操作系统的引导文件(例如MSDOS或者起源于MSDOS的Win9x/Me的IO.SYS和MSDOS.SYS)。如是,就把第一个文件读入内存,并把控制权交予该文件。BPB参数块记录着本分区的起始扇区、结束扇区、文件存储格式、硬盘介质描述符、根目录大小、FAT个数、分配单元(Allocation Unit,以前也称之为簇)的大小等重要参数。OBR由高级格式化程序产生(例如DOS 的Format.com)。

文件分配表

FAT(File Allocation Table)即文件分配表,是DOS/Win9x系统的文件寻址系统,为了数据安全起见,FAT一般做两个,第二FAT为第一FAT的备份, FAT区紧接在OBR之后,其大小由本分区的大小及文件分配单元的大小决定。关于FAT的格式历来有很多选择,Microsoft 的DOS及Windows采用我们所熟悉的FAT12、FAT16和FAT32格式,但除此以外并非没有其它格式的FAT,像Windows NT、OS/2、UNIX/Linux、Novell等都有自己的文件管理方式。

目录区

DIR是Directory即根目录区的简写,DIR紧接在第二FAT表之后,只有FAT还不能定位文件在磁盘中的位置,FAT还必须和DIR配合才能准确定位文件的位置。DIR记录着每个文件(目录)的起始单元(这是最重要的)、文件的属性等。定位文件位置时,操作系统根据DIR中的起始单元,结合FAT表就可以知道文件在磁盘的具体位置及大小了。在DIR区之后,才是真正意义上的数据存储区,即DATA区。

数据区

DATA虽然占据了硬盘的绝大部分空间,但没有了前面的各部分,它对于我们来说,也只能是一些枯燥的二进制代码,没有任何意义。在这里有一点要说明的是,我们通常所说的格式化程序(指高级格式化,例如DOS下的Format程序),并没有把DATA区的数据清除,只是重写了FAT表而已,至于分区硬盘,也只是修改了MBR和OBR,绝大部分的DATA区的数据并没有被改变,这也是许多硬盘数据能够得以修复的原因。但即便如此,如MBR/OBR/FAT/DIR之一被破坏的话,也足够咱们那些所谓的DIY老鸟们忙乎半天了……需要提醒大家的是,如果你经常整理磁盘,那么你的数据区的数据可能是连续的,这样即使MBR/FAT/DIR全部坏了,我们也可以使用磁盘编辑软件(比如DOS下的DiskEdit),只要找到一个文件的起始保存位置,那么这个文件就有可能被恢复(当然了,这需要一个前提,那就是你没有覆盖这个文件……)。

硬盘分区方式

我们平时说到的分区概念,不外乎三种:主分区、扩展分区和逻辑分区。主分区是一个比较单纯的分区,通常位于硬盘的最前面一块区域中,构成逻辑C磁盘。在主分区中,不允许再建立其它逻辑磁盘。

扩展分区的概念则比较复杂,也是造成分区和逻辑磁盘混淆的主要原因。由于硬盘仅仅为分区表保留了64个字节的存储空间,而每个分区的参数占据16个字节,故主引导扇区中总计可以存储4个分区的数据。操作系统只允许存储4个分区的数据,如果说逻辑磁盘就是分区,则系统最多只允许4个逻辑磁盘。对于具体的应用, 4个逻辑磁盘往往不能满足实际需求。为了建立更多的逻辑磁盘供操作系统使用,系统引入了扩展分区的概念。

所谓扩展分区,严格地讲它不是一个实际意义的分区,它仅仅是一个指向下一个分区的指针,这种指针结构将形成一个单向链表。这样在主引导扇区中除了主分区外,仅需要存储一个被称为扩展分区的分区数据,通过这个扩展分区的数据可以找到下一个分区(实际上也就是下一个逻辑磁盘)的起始位置,以此起始位置类推可以找到所有的分区。无论系统中建立多少个逻辑磁盘,在主引导扇区中通过一个扩展分区的参数就可以逐个找到每一个逻辑磁盘。

需要特别注意的是,由于主分区之后的各个分区是通过一种单向链表的结构来实现链接的,因此,若单向链表发生问题,将导致逻辑磁盘的丢失。

数据存储原理

既然要进行数据的恢复,当然数据的存储原理我们不能不提,在这之中,我们还要介绍一下数据的删除和硬盘的格式化相关问题……

文件的读取

操作系统从目录区中读取文件信息(包括文件名、后缀名、文件大小、修改日期和文件在数据区保存的第一个簇的簇号),我们这里假设第一个簇号是0023。

操作系统从0023簇读取相应的数据,然后再找到FAT的0023单元,如果内容是文件结束标志(FF),则表示文件结束,否则内容保存数据的下一个簇的簇号,这样重复下去直到遇到文件结束标志。

文件的写入

当我们要保存文件时,操作系统首先在DIR区中找到空区写入文件名、大小和创建时间等相应信息,然后在Data区找到闲置空间将文件保存,并将Data区的第一个簇写入DIR区,其余的动作和上边的读取动作差不多。

文件的删除

Win9x的文件删除工作却是很简单的,简单到只在目录区做了一点小改动?D?D将目录区的文件的第一个字符改成了E5就表示将改文件删除了。

附录:

Fdisk和Format的一点小说明

和文件的删除类似,利用Fdisk删除再建立分区和利用Format格式化逻辑磁盘(假设你格式化的时候并没有使用/U这个无条件格式化参数)都没有将数据从DATA区直接删除,前者只是改变了分区表,后者只是修改了FAT表,因此被误删除的分区和误格式化的硬盘完全有可能恢复……

系统启动流程

各种不同的操作系统启动流程不尽相同,我们这里以Win9x/DOS的启动流程为例。

第一阶段:系统加电自检POST过程。POST是Power On Self Test的缩写,也就是加电自检的意思,微机执行内存FFFF0H处的程序(这里是一段固化的ROM程序),对系统的硬件(包括内存)进行检查。
第二阶段:读取分区记录和引导记录。当微机检查到硬件正常并与CMOS设置相符后,按照CMOS设置从相应设备启动(我们这里假设从硬盘启动),读取硬盘的分区记录(DPT)和主引导记录(MBR)。
第三阶段:读取DOS引导记录。微机正确读取分区记录和主引导记录后,如果主引导记录和分区表校验正确,则执行主引导记录并进一步读取DOS引导记录(位于每一个主分区的第一个扇区),然后执行该DOS引导记录。
第四阶段:装载系统隐含文件。将DOS系统的隐含文件IO.SYS入内存,加载基本的文件系统FAT,这时候一般会出现Starting Windows 9x...的标志,IO.SYS将MS.SYS读入内存,并处理System.dat和User.dat文件,加载磁盘压缩程序。
第五阶段:实DOS模式配置。系统隐含文件装载完成,微机将执行系统隐含文件,并执行系统配置文件(Config.sys),加载Config.sys中定义的各种驱动程序。
第六阶段:调入命令解释程序(Command.com)。系统装载命令管理程序,以便对系统的各种操作命令进行协调管理(我们所使用的Dir、Copy等内部命令就是由Command.com提供的)。
第七阶段:执行批处理文件(Autoexec.bat)。微机将一步一步地执行批处理文件中的各条命令。
第八阶段:加载Win.com。Win.com负责将Windows下的各种驱动程序和启动执行文件加以执行,至此启动完毕。

主分区表数据及分析
在英文字典中,对主引导区的定义如下:

Master Boot Record:The Master Boot Record is located at the physical beginning of a hard disk, editable using the Disk Editor. It consists of a master bootstrap loader code (446 bytes) and four subsequent, identically structured partition records. Finally, the hexadecimal signature 55AA completes a valid Master Boot Record.

硬盘的主引导记录在硬盘的0磁头0柱面1扇区。主引导记录由三部分组成:
主引导程序;
四个分区表;
主引导记录有效标志字。

表1 主引导记录结构

说明:
分区表自偏移1BEH处开始,分区表共64个字节,表中可填入四个分区信息,每十六个字节为一个分区说明项,这16个字节含义详见表2。

必须注意:扇区号的高二位占用柱面号所在字节的最高二位,即柱面号为10位,扇区号6位。

表2 分区结构信息

重要公式:02H为X,03H为Y。柱面=(X>>6)*16^2+Y;

以我的硬盘为例:有九个可用分区,二个不可用分区;两个Primary NTFS分区,第二个为active;七个Extened 分区,第五个为NTFS其他为FAT32.

主分区表数据:位置cylinder0, head 0,sector1

主分区表分析:
Master bootstrap loader code
0000H -00D9H 33 C0 8E D0 BC 00 7C FB 50 。。。主引导记录代码,表示住分区表
01BEH -01CDH 分区1结构信息
multi(0)disk(0)rdisk(0)partition(0)
知该分区Boot Sector位于:起始磁头为0头,起始柱面为70D,起始扇区为1扇区。
01CEH -01DDH 分区2结构信息
multi(0)disk(0)rdisk(0)partition(1)
活动分区指示符为80H,表示该分区为可自举分区。
系统标志为07表示OS/2 HPFS, Windows NT NTFS, Advanced Unix系统。知该分区Boot Sector位于:起始磁头为0头,起始柱面为304D,起始扇区为1扇区。
01DEH -01EDH 分区3结构信息
Extended partition
系统标志字节为0F,说明是扩展分区Extended partition (using INT 13 extensions)。
从扩展分区说明项知下一个分区表位于:起始磁头为0头,起始柱面为435D,起始扇区为1扇区。
01EEH -01FDH 分区4结构信息

分区说明项数据均为00H没有定义。

01FEH -01FFH 55 AAH 主引导记录有效标志

扩展分区数据及分析

扩展分区一分区表数据:位置cylinder435D, head 0,sector1

扩展分区表分析

01BEH -01CDH 分区1结构信息

multi(0)disk(0)rdisk(0)partition(3)
知该分区位于:起始磁头为1头,起始柱面为435D,起始扇区为1扇区(分区表占用磁头0)。
系统标志字0BH表示 Windows 95+ FAT32

01BEH -01CDH 分区1结构信息

系统标志字节为05H,说明是扩展DOS分区。于是知下一个分区表位于:起始磁头为0头,起始柱面为777D,起始扇区为1扇区。

Partition Table Entry #3 数据均为00H没有定义。
Partition Table Entry #4 数据均为00H没有定义。

其他扩展分区同理。

附录:Fdisk的MBR参数

MBR 系 FDISK.COM(EXE) 一项未公布的开关,隐含于 MS DOS 3.30,延至 MS DOS 8.0(Windows ME)。实践中,有籍以修复主引导信息,重点在主引导程序。

FDISK /MBR 命令流程的分支有二:

读得主引导扇区检验标志(字) AA55h,操作单一,仅向主引导扇区位移 0-1BDH 写入当前系统固有的主引导程序,安全可靠。

难能可贵的是它不触动主引导信息其余模块(分区表、检验标志),以及随后的 DOS 引导信息、文件分配表、根目录,省事许多。检出检验标志非 AA55h,写主引导程序、初始化分区表及登录检验标志,在 MS DOS 7.0 - 8.0 环境中,常规以系统支持的最大容量分配给基本 DOS 分区的方式登录分区表。分区表初始化(可能幸存的分区表被清除)的后果不难想象; 目前硬盘大都设置有其它分区,即使在高版本 DOS 环境中运作,常规建立的分区表每难能符合实际需求,后续工作量也相当可观。

不过,它也不触动位于其后的 DOS 引导信息、文件分配表及根目录,高版本 FDISK /MBR 命令适用于修复仅设基本 DOS 分区的硬盘分区表及检验标志受损,或主引导信息全毁。

可见,在运行 FDISK /MBR 命令之前,需查明检验标志是否 AA55h,酌情处理,切忌盲动。

经由 DOS 软盘引导,认硬盘,检验标志必健在。

另外,在 FDSIK 主菜单中选 4. Display Partition Information,列出分区信息,进一步证实检验标志正常; 若现 No partitition defined,检验标志每变异,而分区表或许尚健在。

深入逻辑分区

现在深入每一个逻辑分区,逻辑分区结构如下:

FAT12/16
Logical sector =0 Logical sector=1
(Floppy disk=1~9) Logical sector=1+sectors_per_FAT
(Floppydisk=10~18) Logical sector=1+sectors_per_FAT*2
(Floppy disk=19~32) Logical sector=1+sectors_per_FAT*2+sectors_of_rootdirectories
(Floppy disk=33~)
DOS Boot Sector FAT1 FAT2 ROOT Directory Data area(where files and subdirectories are stored)

FAT32
Usually 32 sectors Logical sector =0032h Logical sector =0032h+ 2*sectors_per_FAT
DOS Boot Recore 3 Sectors Reserved sectors Copy of record Reserve sectors FAT1 FAT2 Data area(where files and all bdirectories are stored)

在逻辑分区当中用逻辑的cluster和sector。换算关系为:
cluster=logical_sector/sectors_per_cluster;
这里sectors_per_cluster是在BIOS Parameter Block里得到的。
Sector=( logical_sector mod sectors_per_track)+1;
Head=( logical_sector / sectors_per_track)mod total_heads;
Cylinder= logical_sector(sectors_per_track* total_heads);
logical_sector=( cluster-2)*sectors_per_cluster+sector_of_file_area_offset;
logical_sector=(sector-1)+head*sector_per_track+sector*sector_per_track*heads;
每个扇区长度=512字节
总簇数=逻辑盘容量/簇容量
总簇数=FAT表长度(字节)/每个表项长度(字节)-2
FAT表长度=逻辑盘容量/簇容量*每个表项长度

Dos引导记录块位于逻辑0 sector中包含三部分:
(1) 磁盘IO参数表BPB;
(2) 磁盘基数表;
(3) 引导区代码。

描述逻辑盘结构的BPB表
FAT16 的BPB(BIOS Parameter Block)表,描述逻辑盘结构组成,包含隐藏扇区数目(从0-1-1开始计算)、FAT扇区数、FAT拷贝数、硬盘磁头总数、根目录表项最大值等。 FAT32系统中,BPB表的偏移与FAT16不同,但表项基本相同。整个隐藏扇区部分都作为逻辑盘的描述区域。

硬盘BPB主要结构说明:

(Cylinder柱面/磁道-Side/Head磁头-Sector扇区地址以下简称为?-?-?)

主分区
名称 地址 长度(扇区)
主引导记录(Main Boot Record) 0-0-1 1
系统扇区(System Secotrs) 0-0-2,0-0-63 62
引导扇区(Boot) 0-1-1 1

扩展分区
名称 地址 长度(扇区)
扩展分区(Extend Partition) ?-y-1 1
系统扇区(System Secotrs) ?-y-2,?-y-63 62
引导扇区(Boot) ?-(y+1)-1 1
其后各项与主分区相同……

隐藏扇区(Hidden Secotrs):
FAT16 0-1-1 1
FAT32 0-1-1 32

文件分配表(File Allocation Table):
FAT16 0-1-2 根据逻辑盘容量变化
FAT32 0-1-33 根据逻辑盘容量变化

说明:
1. FAT16的每个表项由2字节(16位)组成,通常每个表项指向的簇包含64个扇区,即32K字节。 逻辑盘容量最大为2047MB。
2. FAT32的每个表项由4字节(32位)组成,通常每个表项指向的簇包含8个扇区,即4K字节。逻辑盘容量最小为512MB。
3. 对于C分区,在MBR的偏移01c2H处,FAT16为06H,FAT32为0CH。

深入逻辑分区之文件分配表(FAT)

FAT是DOS、Windows9X系统的文件寻址格式,位于DBR之后。

在解释文件分配表的概念的时候,我们有必要谈谈簇(Cluster)的概念。文件占用磁盘空间,基本单位不是字节而是簇。一般情况下,软盘每簇是1个扇区,硬盘每簇的扇区数与硬盘的总容量大小有关,可能是4、8、16、32、64……同一个文件的数据并不一定完整地存放在磁盘的一个连续的区域内,而往往会分成若干段,像一条链子一样存放。这种存储方式称为文件的链式存储。由于硬盘上保存着段与段之间的连接信息(即FAT),操作系统在读取文件时,总是能够准确地找到各段的位置并正确读出。

为了实现文件的链式存储,硬盘上必须准确地记录哪些簇已经被文件占用,还必须为每个已经占用的簇指明存储后继内容的下一个簇的簇号。对一个文件的最后一簇,则要指明本簇无后继簇。这些都是由FAT表来保存的,表中有很多表项,每项记录一个簇的信息。由于 FAT对于文件管理的重要性,所以为了安全起见,FAT有一个备份,即在原FAT的后面再建一个同样的FAT。初形成的FAT中所有项都标明为“未占用”,但如果磁盘有局部损坏,那么格式化程序会检测出损坏的簇,在相应的项中标为“坏簇”,以后存文件时就不会再使用这个簇了。FAT的项数与硬盘上的总簇数相当,每一项占用的字节数也要与总簇数相适应,因为其中需要存放簇号。FAT的格式有多种,最为常见的是FAT16和FAT32。

当一个磁盘Format后,在其逻辑0扇区(即BOOT扇区)后面的几个扇区中存在着一个重要的数据表?D文件分配(FAT),文件分配表一式两份,占据扇区的多小凭磁盘类型大小而定。顾名思义,文件分配表是用来表示磁盘问件的空分配信息的。它不对引导区,文件目录的信息进行表示,也不真正存储文件内容。

我们知道磁盘是由一个一个扇区组成的,若干个扇区合为一个簇,文件存取是以簇为单位的,哪怕这个文件只有1个字节。每个簇在文件分配表中都有对应的表项,簇号即为表项号,每个表项占1.5个字节(磁盘空间在10MB以下)或2个字节(磁盘空间在10MB以上)。为了方便起见,以后所说的表项都是指2个字节的。

FAT表的开始由介质描述符+一串“已占用”标志组成:
FAT16硬盘----F8 FF FF 7F
FAT32硬盘----F8 FF FF 0F FF FF FF 0F

每个有效的FAT结构区包含两个完全相同的拷贝:FAT1、FAT2
文件分配表结构如1(H表示16进制)
第0字节:表头,表磁盘类型。FFH双面软盘,每次道8扇区FEH单面软盘,每磁道8扇区FDH双面软盘,每磁道9扇区FCCH单面软盘,每磁道9扇区FC8H硬盘
第1~2字节:(表项号1)表示第一簇状态,因第一簇被系统占据,故此两字节为FFFFH
第3~4字节:(表项号2)表示第二簇状态,若为FFFH表此簇为坏的,DOS已标记为不能用;0000H表示此簇为空,可以用;FFF8H表不能示该簇为文件的最后一簇;其余数字表示文件的下一个簇号,注意高字节在后,低字节在前。
第5~6字节:(表项号3)表示第三簇状态,同上。

注意:
不要把表项内的数字误认为表示当前簇号,而应是该文件的下一个簇的簇号。.高字节在后,低字节在前是一种存储数字方式,读出时应对其进行调整。是如两字节12H,34H,应调整为3412H。

文件分配表与文件目录(FDT)相配合,可以统一管理整个磁盘的文件。它告诉系统磁盘上哪些簇是坏的或已被使用,哪些簇可以用,并存储每个文件所使用的簇号。它是文件的“总调度师”。

当DOS 写文件时,首先在文件目录中检查是否有相同文件名,若无则使用一个文件目录表项,然后依次检测FAT中的每个表项对应的簇中,同时将该簇号写入文件目录表项相的26-27字节,如文件长度不止一簇,则继续向后寻找可用簇,找到后将其簇号写入上一次找到的表项中,如此直到文件结束,在最后一簇的表项里填上 FFF8H,形成单向链表。

DOS删除文件时只是把文件目录表中的该文件的表项第0个字节改为E5H,表此项已被删除,并在文件分配表中把该文件占用的各簇的表项清0,并释放空间。其文件的内容仍然在盘上,并没有被真正删除,这就是undelete.exe,unerase.exe等一类恢复删除工具能起作用的原因。
文件分配表在系统中的地位十分重要,用户最好不要去修改它,以免误操作带来严重的后果。

深入逻辑分区之文件目录表(FDT)
文件目录表(File Directory Table),即根目录区,又称为ROOT区

紧跟在FAT2的下一个扇区,长度为32个扇区(256个表项)。如果支持长文件名,则每个表项为64个字节,其中,前32个字节为长文件链接说明;后32 个字节为文件属性说明,包括文件长度、起始地址、日期、时间等。如不支持长文件名,则每个表项为32个字节的属性说明。

值得注意的是:
FAT32没有储存目录的目录区,而 FAT16储存根目录并把子目录放到数据区。
表示目录的目录项指出根目录地址同时长度字节为0,表示文件的目录项指出数据地址。

注意:DOS7前的怪字符为E5H,表示被删除,被删除文件仍旧能够找到开始簇,数据恢复就依靠这一特点。
数据区(Data Area): 紧跟在FDT的下一个扇区,直到逻辑盘的结束地址。它存储着所有的数据,而且即使文件目录被破坏仍旧可能从磁盘里把信息读出,这也就是硬盘数据的理论依据。
到现在为止,硬盘数据结构的理论部分已经讲完。数据恢复主要是手动找出FAT、目录、数据的对应关系或直接找到数据,现在已经有完善的磁盘编辑器帮助我们做到这一点,使工作大大简化了。
有只能化的恢复工具能不依靠FAT而恢复被删除文件,比如RECOVERNT,估计是依靠Win2000的文件使用记录。这种方法在冲启动之前恢复文件的可能性很大。从理论上讲只要数据不被覆盖总能被恢复的。

什么是图形工作站?

“图形工作站”是一种专业从事图形、图像(静态)、图象(动态)与视频工作的高档次专用电脑的总称,现已被广泛地使用在以下领域。
◇ 专业平面设计, 如广告、媒体设计
◇ 建筑/装璜设计,如建筑效果图
◇ CAD/CAM/CAE,如机械、模具设计与制造
◇ 视频编辑,如非线性编辑
◇ 影视动画,如三维的影视特效
◇ 视频监控/检测,如产品的视觉检测
◇ 虚拟现实,如船舶、飞行器的模拟驾驶
◇ 军事仿真,如三维的战斗环境模拟

从软硬件平台来看,工作站分为:
◇ Unix工作站,基于Unix/RISC的传统Unix工作站
◇ NT工作站,基于Windows/Intel架构的新型NT工作站

而NT工作站由于具有价格低廉、配置灵活、使用方便、维护/开发成本低等优势,已被广大用户所认同、接收,我们一般所说的“工作站”也是特指这一类产品。

大部分用户一直存在这样一个疑问:“为何图形工作站的价格要大大超出普通电脑,难道仅仅是因为使用了一些高档、高价的部件?”由于工作站具有特殊的应用定 位,这就决定了其在性能、可扩充性、稳定性、图形/图象画质等多方面要大大超越普通电脑,但是:图形工作站绝对不是普通电脑的简单增强!工作站的配置准则 在于:切实了解应用单位需求,以合理的价格组建一个符合应用软件要求的稳定、高速、高效的设计平台,以最大程度地实现设计人员的设计意图,使之真正成为提 高生产力的工具。这与普通办公、家用电脑注重多媒体性能和价格因素的配置方法是截然不同的。

◇ 稳定性:
图形工作站面向关键和大计算量应用,要求各部件具有较高的稳定性。因系统运行错误(如普通PC经常因内存数据错误造成当机)而造成的程序中止、图档资料丢 失等都令人极度沮丧。而普通显示器长期工作所发生的画面变形等问题,则是任何一个设计人员都不愿意看到的。消费类市场上那些产品,由于品牌定位等原因,在 稳定性方面根本无法满足专业图形工作站的要求。图形工作站所使用的关键部件,自产品设计之时便以稳定性为第一标准,如ECC内存的使用,便可最大限度地杜 绝上述类似事件的发生。

◇ 安全性:
图形工作的最后步骤就是输出图档、图象,但无论这些设计成品是否已提交给客户或者投入使用,都必须通过文件的形式保存在计算机及其外部存储设备中。只通过 单机的硬盘来保存数据,这只是在经费不足及安全性要求不高的前提下所使用的方法(硬盘是计算机中少有的包含大量机械部件的产品,其故障率很高,特别是普通 PC的IDE硬盘),即使是使用刻录机进行文件的保护,也只是简单的“拷贝”。多硬盘建立磁盘阵列、磁带机/库备份数据、外部存储设备保存数据,这才是真 正有意义的数据保护方式,这些都是普通PC所无法进行的。在关键的应用中,通过异地保存、异地备份的方式,是避免灾难性结果的最好方法。

◇ 运行连续性:
图形工作站往往数十小时连续运行(典型的如模具CAD/CAM和模拟船舶驾驶等应用),这要求工作站系统能够承受长时间的连续大负荷运行。这就象部门级、 企业级网络服务器一样,最大限度地杜绝“计划外停机”事件的发生,是保证工作站最大发挥生产力的准则!虽然一些高档、高价的普通PC也具有一定的稳定性, 但是对于工作站的应用来说,那远远不够!即使您的普通PC的一些部件具有良好的保修,但是其返修及再次装配的时间还是会造成工作的停顿。工作站的部件以稳 定为第一,是系统最大生产力发挥的有利保障。

◇ 性能:
当进行大部件、多部件的装配和动画中复杂场景的渲染时,普通的Pentium4系统根本无法满足要求,必须使用Xeon甚至是多CPU的SMP系统。而大 幅面的Photoshop效果图和复杂的CAM图档尺寸往往达到数百兆甚至1G以上,处理这些文件必须具有超大容量内存和速度极快的硬盘系统,比较典型的 是由两个硬盘组建RAID 0,从实际使用效果来看,可以提高硬盘系统60~70%的性能。

◇ 2D/3D画面质量:
典型地,复杂动画场景的渲染错误和CAD/CAM中面与面衔接线的锯齿、断裂,这是普通显示卡必定会存在的问题,而专业图形加速卡在产品设计时便会考虑到这些,可以最大程度地避免此类现象。

无盘工作站的建立

一。建立NT无盘工作站的注意事项
(1)在安装NT服务器时一定要使用NTFS分区格式而不能使用FAT分区格式,因为NT服务器的很多安全特
性是靠NTFS文件系统来完成的,如果使用FAT文件格式,则很多安全特性无法实现。
(2)10M网络的流量问题。在安装NT无盘的环境下,如果工作站同时开机(学校上机的主要特征)。每
一10M网段上最好不要超过12台DOS工作站,如果DOS工作站数量超过这个数字,则在DOS工作站开机时有些工
作站就无法登陆。建议在服务器上多加一至三块网卡,每一网卡为一个网段,如果数量更大的话建议在服务
器上安装100M网卡,连100M/10M交换机,然后再连普通HUB,这样每100M网段可以连接的机器数量可达100台
左右。
(3)在安装RPL服务器,建议将RPL目录不要放在WINDOWS子目下,而是放在另一个逻辑盘上,否则无盘用
户可以无限制地向服务器拷贝文件,从而导致服务器上磁盘空间很快就用光了。


二。无盘工作站的工作机理
当工作站上网卡启动时,网关上BOOT ROM片会送出一个FIND帧(BOOT Request),其中包含此工作站的网卡
卡号。远程启动服务器收到启动要求后,即检查远程启动数据库中是否有该卡号的启动数据记录。如果有,则
记录此工作站卡号,并不引导,只有利用“远程启动管理器”建好此卡有关完整数据后(一个是引导块,另一
个是远程启动环境配置文件)才可以。如果有,则远程启动服务器送一个FOUND帧给工作站。工作站上RPLROM接
收到“FOUND”帧并送出“SEND。FILE。REQUEST”帧,远程启动服务器收到“SEND。FILE。REQUEST”要求后,
会根据数据库中的设置,用“FILE。DATA。RESPONSE”帧来发送工作站所需的启动文件。工作站接收到完整的
启动文件后,就开始执行启动过程,对DOS或Windows3.2,已完成启动过程。对Windows95/98,还需执行一些步
骤,下面将进一步介绍。

三。无盘工作站的具体实现
1。安装与启动远程启动服务
由于该服务需要用到DLC与NETBEUI通信协议,需要先在NT Server上安装这两种通信协议,在“网络”项安
装后,再用“网络”项中“服务”项来添加远程启动服务,再在该服务中单击“启动”,可设成自动启动方式。
2。在服务器上为工作站上安装启动时所需的DOS文件
当工作站启动时,需要利用远程启动服务器上传过来的DOS文件来启动,因此必须先在远程启动服务器上安
装DOS操作系统。其步骤如下:
(1)将启动服务器中%system root% \RPL\RPLFILES目录设为共享。
(2)将DOS所有文件复制到%system root% \RPL\RPLFILES\DOSxxx,xxx为版本号。IO。SYS,MSDOS。SYS
的系统和隐含两属性去掉后,再拷贝。
3。远程启动支持所用的网卡的实现
确定网卡记录是否在远程启动服务器的数据库中,只需要通过查看卡号前的六个字节,执行RPLCMD命令,选
Vender-ENUM项即可。
若不在,就需要再运行RPLCMD,将网卡记录手工配置添加到远程启动服务器的数据库内 。
RPLCMD执行后,有如下命令选项,含义说明如下:
Adapter:用于修改不完整网卡记录
Boot:修改BootBlock记录
Config:修改配置记录
Profile:修改配置文件
Service:控制远程启动服务
Wksta:修改工作站记录
Vender:设置网卡厂商的名称或卡号的前6位
每一个命令都至少会有以下的子命令:
ADD/Del/Enum:添加/删除/显示一行记录
先执行:“远程启动服务器/配置/备份数据库”选项,将数据库备份。
然后为DOS,Windows3.2工作站添加网卡记录。
.将新的网卡DOS驱动程序复制到%System root%\RPL\BBLOCK\NDIS目录中,一般其扩展文件名为.DOS
.添加一个%System root%\RPL\BBLOCK\NDIS\adapter目录,其中adapter为网卡的名称,在此目录中,
必须包含DOSBB.CNF和PROTOCOL.INI着两个文件。
.利用RPLCMD程序,添加此网卡的厂商数据,也就是网卡的卡号的前六位码,
例如:
C:\winnt>rolcmd Adapter Boot Config Profile Service Vender Wksta[Quit]vAdd Del Enum:a
Vender Name=00aoc9(输入卡号的前6位)all other parameter sare optional Vender Comment=lnete
Ethlnk Epro(等号右边为输入的注释说明)
.利用RPLCMD程序,添加此网卡的BOOT Block,
例如:
C:\winnt>rolcmd Adapter Boot Config Profile Service Vender Wksta[Quit]vAdd Del Enum:a
Vender Name=DOSINTEL Vender Name=00aoc9(输入卡号的前6位)BbcFile=BBLOCK\NETBEUI\diname\DOSBB.
CNF all other parameter sare optional Boot Comment=lnter Ethlnk Epro(等号右边为输入的注释说明)
WINDOWSIZE=0
.利用RPLCMD程序,添加此网卡的配置,
例如:
C:\winnt>rolcmd Adapter Boot Config Profile Service Vender Wksta[Quit]cAdd Del Enum:a Config
Name=DOS622-INTEL Boot Name=DOS INTEL Dir Name=DOS Dir Name2=DOS622 Fit Shared=fits\dos622.fit
Fit personal=fits\dos622p.fit all other parameter sare optional Boot Comment=DOS6.22for lnter
Ethlnk Epro(输入的注释说明)
其中Fit Shared为共享的目录映射关系文件;Fit personal为专用的目录映射关系文件。
添加完成后,必须执行“远程启动管理器”→“配置”→“检查配置”功能
最后为Windows95/98工作站添加网卡记录

NT和DOS无盘工作站的安装和建立

安装Windows NT的DOS无盘工作站必须选用支持NT远程启动的网卡。在众多的网卡中,卡号前六位数字为
0020AF和00608C的网卡直接支持NT的远程起动,如果你选用的网卡是这两种,那么就可以忽略本节中添加网卡
部分的内容。

一,准备工作
设NT安装在C:\WINNT目录下,工作站网卡I/O=300,IRQ=3,ADRESS=C800(尽量用此设置),其卡号前六位为
0000E8(通过网卡的附带程序测得)。
1。通过“控制面板”→“网络”→“添加”→“协议”添加“DLC通讯协议”。
1。通过“控制面板”→“网络”→“添加”→“服务”添加“远程启动服务”。
1。通过“控制面板”→“服务”激活“服务”对话框,在“启动类型”选项中选中“自动”,再单击“确
定”即可。

二为远程启动工作站安装MS-DOS文件
先将NTServer共享以下目录:C:\WINNT\rpl\rplfiles
然后将某台工作站运行的MS-DOS或PC-DOS(此处使用DOS6.22)拷贝至以下目录:
\WINNT\rpl\rplfiles\binfiles\dos622
copy copy c:\dos\对话框的\bindfiles\dos622
copy attrib -s-h c:\io.sys
copr attrib -s-h c:\msdos.sys
copr copy c:\io.sys\binfiles\dos622
copy copy c:\msdos.sys\binfiles\dos622
最后启动远程启动服务。

三,为远程启动工作站的网卡建立远程启动配置
(1)Copy网卡的NDIS驱动(如de22x.dos)到以下目录
C:\WINNT\rpl\bblock\ndis
(2)建立C:\WINNT\rpl\bblock\netbeui\de22x目录并在该目录中建立以下文件。
DOSBB.CNF及PROTOCOL.INI
将其他网卡目录(如AM2100)中的文件Copy到DE22X目录中,并进行更改,将所有的AM2100替换为de22x。
更改DOSBB.CNF文件如下:
;DOSonD-LinkDE-22xEthernet
BASED0H
RPLBBLOCK\RPLBOOT.SYS
LDRBBLOCK\RPLSTART.COM~
DATBBLOCK\NETBEUI\DE22X\PROTOCOL.INI
DRVBBLOCK\RPLDISK.SYS~~
EXEBBLOCK\RPLPRO1.COM~2~
EXEBBLOCK\13.COM~~
EXEBBLOCK\RPLBIND2.EXE~
EXEBBLOCK\PROTMAN.EXE~
EXEBBLOCK\RPLBIND1.EXE~
;DRVBBLOCK\IPXNDIS.DOS~~
;DRVBBLOCK\TCPDRC.DOS/I:C:\LANMAN.DOS~
EXEBBLOCK\NETBEUI\NETBEUI.EXE~10~
DRVBBLOCK\BDIS\DE22x.DOS~~
DRVBBLOCK\PROTMAN.DOS/I:C:\LANMAN.DOS~M
更改PROTOCOL.INI文件如下:
[protman]
drivername=protman$
dynamic=yes
priority=netbrui
[netbeui_xif]
drivername=netbuei$
bindings=de22X_nif
names=6
ncbs=13
packets=20
pipeline=10
sessions=6
stacksize=512
lanabase=0
[xnsnb_xif]
drivername=xnsnb$
bindings=de22X_nif
load=xnsnb[cbr]
lanabase=1
[xnstp_xif]
drivername=xnstp$
bindigs=de22X_nif
load=xnstp[ub]
lanabase=1
[tepip-xif]
drivername=TCPIP$
disabiedhcp=(TCPIP_BO_DHCP)
ipaddress0=(TCPIP_ADDRESS)
subnetmask0=(TCPIP_SUBMASK)
defaultgateway0=(TCPIP_GATEWAY)
tcpsegmentsize=1450
tcpwindowsize=1450
nlsessions=6
load=tcptsr[c],tinyrfcnc[c],emsbfr[cr]
unload="unloadt/notsr[dc]"
bindings=de22X_nif
lanabase=1
[ipx_xif]
driveyname=ipx$
lload=ipxmark,ipx
unload=ipxrel[c]
bindings=de22X_nif
lanabase=1
[msdic_xif]
drivername=msdlc$
bindings=de22X_nif
load=msdlc[ub]
unload=msdlc
[de220_nif]
drivername=de22X$

四,使用RPLCMD命令增加启动文件
在DOS提示符下,执行C:\WINNT\rpl>rplcmd
注意:在下面设置中,保证BOOTNAME,CONFIGNAME,PROTOCOL NAME一致(其中大写字母为Server显示的,而
小写字母为用户输入的)。
建立Boot文件:
ADAPTER BOOT CONFIG配置文件SERVICE VENDOR WKST A[QUIT]:b
ADD DEL MENU:a
BOOT NAME=dosi
VENDOR NAME=0080c8(输入卡号前6位)
BBCFILE=bblocklnetbeui\de22x\dosbb.cnf
ALL OTHER PARAMETER SARE OPTONAL
BOOT COMMENT=dos D-Linkde22x ethernet
WINDOW SIZE=0x0
建立Config文件:
ADAPTER BOOT CONFIG配置文件SERCIVE VENDOR WKST A[QUIT]:C
ADD DEL MENU:a
CONFIG NAME=dos6x
BOOT NAME=dosi
DIR NAME=dos
DIR NAME=dos622
FIT SHARED=fits\dos622.fit
FIT PERSONAL=fits\dos622p.fit
ALL OTHER PAPAMETER SARE OPTIONAL
CONFIG COMMENT=dos6.22 D-Linkde22x
DIR NAME3=
DIR NAME4=
建立配置文件文件:
ADAPTER BOOT CONFIG配置文件SERCIVE VENDOR WKST A[QUIT]:C
ADD COLON DEL MENU GET INFO SET INFO:a
配置文件NAME=de22x
CONFIG NAME=dos6x
ALL OTHER PARAMETER SARE OPTIONAL
配置文件COMMENT=dos6.22 D-Linkde22x
BOOT NAME=dosi
FIT SHARED=fits\dos622.fit
FIT personal=fits\dos622p.fit
打开“程序”子菜单的“管理工具”中的“远程启动系统管理”或在DOS提示符下运行RPLMGR。注意:以
Adminisstrators登录(Logon)运行“配置”中的“检查配置....”

五,增加远程工作站
在服务器上打开“远程启动管理系统”,启动远程启动工作站。注意:此步并不是实际进行过程引导,而是
将引导信息传送给Server。
运行“远程启动系统管理”中的“查看”中的“刷新”,此时远程启动工作站的信息会自动出现。
选择该远程启动工作站记录,运行“远程启动”中的“转换适配器”。

六,建立安全许可文件
打开远程启动系统管理。
选择“配置”中的“修复安全性.......”,并且在下一个对话中选择确认。

七,工作站端设置
远程启动的步骤如下:
先确认已插好Boot-ROM,并将网卡设置成远程启动方式。
然后机,在出现的“System willre-boot automatically Boot from network(y/n)?"中输入”Y“。
待现登录界面,输入Login Name及Password即可进入网络。

什么是无盘工作站?

“盘”指的是硬盘。

无盘工作站的原理就是在网内有一个系统服务器,这台系统服务器上除了有它本身运行所需的操作系统外还需要有一个工作 站运行所需的操作系统。无盘工作站的机箱中没有硬盘,其它硬件都有(如主板、内存等),而且无盘工作站的内存必须带有可引导芯片(一般网卡没有,可引导芯 片可以买到)。在无盘工作站启动时网卡上的可引导芯片从系统服务器中取回所需数据供用户使用。

简单点一句话就是,无盘工作站其实就是把硬盘和主机分离,无盘工作站只执行操作不执行存储。

如何建立无盘工作站?
这是网吧和游戏联网中一个非常重要的技术,目前,海王星因为条件限制,
只找到Accton En165x、3COM和IntelExpress网卡支持NT远程启动,以下部分均以
Accton En165x网卡为例说明。

一.准备工作

1.WINNT远程启动(RPL)服务的安装

WINNT远程启动(RPL)服务可在WINNT安装过程中安装,也可在WINNT中安装。
在WINNT安装过程中,选择网络安装时, 先要安装Microsoft DLC网络协议,再加
入远程启动(RPL)的服务。安装RPL所需的文件在NT光盘上的clients\rpl下。在
NT下安装时,也要先加入DLC协议,在加入RPL服务。以下假设NT被装在D:\WINNT
目录下,远程启动服务的文件被安装在D:\WINNT\RPL目录下,NT Server的名称为
ntserver。

2.Accton En165x网卡远程启动文件的安装

a.首先要拷贝几个必需的文件

将Accton En1657/1658网卡驱动盘插入A驱。
将A:\NDIS\DOS\ETHNE.DOS 拷入D:\WINNT\RPL\BBLOCK\NDIS下。
建立D:\WINNT\RPL\BBLOCK\NETBEUI\ETHNE
将A:\BOOTROM\NT\DOSBB.CNF 拷入D:\WINNT\RPL\BBLOCK\NETBEUI\ ETHNE下。
将A:\BOOTROM\NT\PROTOCOL.INI拷入D:\WINNT\RPL\BBLOCK\ NETBEUI\ETHNE
下。
修改PROTOCOL.INI中的IOBASE和IRQ参数来符合你网卡的设置。

b.建立必需的网卡远程启动数据库

进入命令行状态,在D:\WINNT目录下运行rplcmd。按如下提示输入:

Adapter Boot Config Profile Service Vendor Wksta [Quit]: b
Add Del Enum: a
BootName=DOSA
VendorName=0000E8
BbcFile=BBLOCK\NETBEUI\ETHNE\DOSBB.CNF

All other parameters are optional

BootComment=Ethernet ISA
WindowsSize=0

(以上是加入DOS下网卡的启动文件)

Adapter Boot Config Profile Service Vendor Wksta [Quit]: c
Add Del Enum: a
ConfigName=DOS622x
BootName=DOSA
DirName=DOS
DirName2=DOS622
FitShared=fits\dos622.fit
FitPersonal=fits\dos622p.fit All other parameters are optional
ConfigComment=DOS 6.22 & EN1657/58-P
DirName3=
DirName4=

(以上是加入DOS下网卡的配置文件模板)

Adapter Boot Config Profile Service Vendor Wksta [Quit]: v
Add Del Enum: a
VendorName=0000E8
VendorComment=Accton EN165x/EN1657/58-P(以上是加入网卡的厂商资料)
c.Accton En165x网卡Bootrom的安装

Accton En165x有专用的做NT下远程启动的Bootrom,请将之按正确方向插在
网卡上。用网卡驱动盘上的Setup程序将Bootrom Enable,设置占用地址从C800
(一般)开始。

二.如何建立DOS/Windows无盘站

1.如何安装DOS6.22的无盘站

拷贝DOS启动文件

向D:\WINNT\rpl\Rplfiles\Binfiles\dos622中拷入DOS6.22的IO.SYS和MSDO
S.SYS两个文件,一般情况下,为了正确拷贝这两个文件,需要先用attrib将文件
的系统和隐藏属性去掉,然后拷贝,最后再恢复这两个文件的属性。可以直接从
网络上的一台安装有MSDOS6.22的机器向服务器中该目录拷贝,Rplfiles目录已经
是被共享的;也可从DOS6.22的启动软盘上拷贝。需要注意的是:若你的DOS6.22
中是IBMDOS.SYS和IBMIO.SYS,请将之改名为MSDOS.SYS和IO.SYS,再拷贝。

建立给Accton网卡用的DOS启动配置文件

运行远程启动管理器,在文件菜单中选择新的配置文件,给Accton网卡启动
DOS 的配置文件起一个意义明确的名字,在描述中写明网卡类型、启动DOS版本号,
然后在配置中选择DOS 6.22 & EN1657/58-P(前面用Rplcmd输入的Config的Comm
ent)。

自动转换工作站

运行远程启动管理器,再打开插有Accton网卡的机器,然后在远程启动管理
器中按F5刷新,直至出现要远程启动的机器网卡号。选中网卡,然后选择文件菜
单中的转换适配器,产生工作站属性对话框。在Wksta名中输入给工作站起的名字,
在描述中注明机器型号、网卡型号和启动操作系统。在密码中输入将来无盘站启
动时要输入的密码。

配置类型:如果你做好的配置仅为一台机器使用,就选个人配置类型;要是
想把做好的配置给一些机器使用,就选择共享配置类型。配置文件选择刚建立的
配置文件。

进行TCP/IP协议配置。

启动工作站--重新启动工作站,在出现询问用户名和密码时输入工作站名
(缺省即为工作站名,可敲ENTER跳过)和设好的密码。就可进入DOS6.22。以后
安装软件和配置系统均和一般机器一样,可通过网络安装所需文件,对一些系统
文件的定位请参考D:WINNT\rpl\fits\dos622.fit。

2.如何安装Windows95无盘站

要建立WIN95无盘站,首先必须将该无盘站建成DOS的无盘站。

按如下内容,建立一个w95bb.cnf文件,放到WINNT\RPL\BBLOCK\NETBEUI\ET
HNE\ 下,也可在
WINNT\RPL\BBLOCK\NETBEUI\下找一个w95bb.cnf文件略做更改放入ETHNE目录。
; Windows 95 on Accton EN1657 ETHERNET
BASE D0HRPL BBLOCK\RPLBOOT.SYS
LDR BBLOCK\RPLSTART.COM ~
DAT BBLOCK\NETBEUI\ETHNE\PROTOCOL.INI
;上行为不同于一般的内容。
DRV BBLOCK\RPLDISK.SYS ~ ~ ~
EXE BBLOCK\RPLPRO1.COM ~ 2 ~
EXE BBLOCK\RPLBIND2.EXE ~ ~
EXE BBLOCK\PROTMAN.EXE ~ ~
EXE BBLOCK\RPLBIND1.EXE ~ ~
;DRV BBLOCK\IPXNDIS.DOS ~ ~ ~
;DRV BBLOCK\TCPDRV.DOS /I:C:\LANMAN.DOS ~ ~
EXE BBLOCK\NETBEUI\NETBEUI.EXE ~ 10 ~
DRV BBLOCK\NDIS\ETHNE.DOS ~ ~ ~
;上行为不同于一般的内容。
DRV BBLOCK\PROTMAN.DOS /I:C:\LANMAN.DOS ~ M
EXE BBLOCK\W95I13.COM ~ ~ ~

再用D:|WINNT\rpl下运行rplcmd,建立给WIN95用的数据库。
Adapter Boot Config Profile Service Vendor Wksta [Quit]: b
Add Del Enum: a
BootName=DOSZ
VendorName=0000E8
BbcFile=BBLOCK\NETBEUI\ETHNE\W95BB.CNF All other parameters are op
tional
BootComment=Ethernet ISA
WindowsSize=0
(以上是加入WIN95下网卡的启动文件)
Adapter Boot Config Profile Service Vendor Wksta [Quit]: c
Add Del Enum: a
ConfigName=win95z
BootName=DOSZ
DirName=DOS
DirName2=WIN95
FitShared=fits\win95.fit
FitPersonal=fits\win95p.fit All other parameters are optional
ConfigComment=WIN95 & EN1657/58-P
DirName3=
DirName4=

(以上是加入WIN95下网卡的配置文件模板)

然后运行远程启动管理器,建立新的配置文件,选择WIN95 & EN1657/58-P配
置(刚建立的配置)。

安装

把win95网络版装在NT上,有两种情况,一种是把win95整个目录直接拷到se
rver上,一种是要找台win95
运行netsetup装到server上,这就要看你的win 95
网络版是那种已经解开的,还是要安装的。然后把这个win95目录共享出来。在我
的server上是以pwin95共享出来的。附录中指出了一个已解开的PWin95网络版,
可直接拷入硬盘,以Pwin95共享。建立一个工作站目录,我们假设为D:\machine,
以machine为名字共享出来。Upgrade 这个共享的win95
在d:\winnt\rpl\updat
e\win95下运行两个bat文件。运行bat文件时会有提示。启动无盘工作站,然后在
工作站上进入dos
连接NT Server上的共享目录.

例如 net use f: \\ntserver\pwin95; net use g: \\ntserver\machine
然后按如下步骤进行:

f:setup /iw /is msbatch.inf它会问你是否安装在网络上,答是,还要问你
装那个目录下,我是 g:\work1。安装时选择检查硬件时,要自己选择,而且越少
硬件越好,避免问题。网卡设置时要小心,要设置好irq
io之类,协议一定要选
netbeui,如果要装 tcp/ip,也要这时设好,以后在改动会很麻烦。好了,安
装完了,要重启动,请关机。

不知为什么,这时的Win95缺少必需的启动配置文件(d:\machine\work1\su
boot下的config.sys和autoexec.bat),必须由我们自己来写。当然,要是你发
现了这两个文件,那就省掉如下的步骤了。

config.sys:
DEVICE=HIMEM.SYS
device=emm386.exe ram
DEVICE=ramdrive.sys 1440 /e
dos=umb
high


autoexec.bat:
@if not exist d:\winboot\nul mkdir d:\winboot
copy c:\system.dat d:\winboot
@copy c:\ d:\winboot
d:
cd \winboot

写好后记得放入D:\machine\work1(或者是你自己设的目录)\suboot 下。

配置

在服务器上运行远程启动管理器,改变已经建好的DOS远程启动工作站的属性,
将其配置文件该为前面建好的WIN95配置文件。在d:\winnt\rpl\bin下运行win95
clt
然后改d:\winnt\rpl\rplfiles\profiles\(你自己建立
的配置文件的名字)\suboot\下改win.bat。这个很重要,否则启动不了。改成这
个样子:

set comspec=d:\winboot\command.com
nwrpltrm
snapshot /R /S /B:d /m:120
setmdir /m /r:d:\winboot
net logon /domain:(NT域名,自己改过来) /savepw:
no /y
path=f:\;f:\command;
setmdir
g:
cd work1
win.com

还要改共享出来的win95的machines.ini文件

例如改成
[XXXXXXXXXXXX] <- 你的网卡的MAC即网卡号.
SYSDATPATH=g:\work1
c=\\ntserver\work1 (这里把d:\machine\work1共享成work1了)
f=\\ntserver\cwin95
g=\\ntserver\machine

还要改 config.sys文件, 加上 device=emm386.exe ram; 及 dos=high
um
b。为了使系统能找到emm386.exe
还要改d:\winnt\rpl\fits\win95.fit文件,
加一句 emm386.exe ….
参照himem.sys那一行。然后打开无盘站,启动,继续
安装。启动后会第二次让你登录,注意不要用它给的MAC号当 user name
而要用
工作站名或其他NT的帐号。到此基本上就安装好无盘WIN95工作站了,注意要达到
较好的效果,无盘站的内存要大些,16M是底线,越多越好。

为什么要建无盘工作站
在 很多方面它表现出众,比如,你的网络里使用了各种不同的硬件,那么兼容性就不会很好,网络通讯得不到保障。维护方便,在PXE以前,对于单一工作站的每台 分别安装过于麻烦,会耗费大量时间和投入大量网管人力要做这些事情,而且无法集中管理,安全性也得不到保障,还有如果有内部人员没有经过培训而改动系统设 置,会引起整个网络瘫痪。

PHP配置文件php.ini 中文翻译

; PHP还是一个不断发展的工具,其功能还在不断地删减
; 而php.ini的设置更改可以反映出相当的变化,
; 在使用新的PHP版本前,研究一下php.ini会有好处的

;;;;;;;;;;;;;;;;;;;
; 关于这个文件  ;
;;;;;;;;;;;;;;;;;;;

; 这个文件控制了PHP许多方面的观点。为了让PHP读取这个文件,它必须被命名为
; 'php.ini'。PHP 将在这些地方依次查找该文件:当前工作目录;环境变量PHPRC
; 指明的路径;编译时指定的路径。
; 在windows下,编译时的路径是Windows安装目录。
; 在命令行模式下,php.ini的查找路径可以用 -c 参数替代。

; 该文件的语法非常简单。空白字符和用分号''开始的行被简单地忽略(就象你可能
; 猜到的一样)。 章节标题(例如 : [Foo])也被简单地忽略,即使将来它们可能
; 有某种的意义。
;
; 指示被指定使用如下语法:
; 指示标识符 = 值
; directive = value
; 指示标识符 是 *大小写敏感的* - foo=bar 不同于 FOO = bar。
;
; 值可以是一个字符串,一个数字,一个 PHP 常量 (如: E_ALL or M_PI), INI 常量中的
; 一个 (On, Off, True, False, Yes, No and None) ,或是一个表达式
; (如: E_ALL & ~E_NOTICE), 或是用引号括起来的字符串("foo").
;
; INI 文件的表达式被限制于位运算符和括号。
; |  bitwise OR
; &  bitwise AND
; ~  bitwise NOT
; !  boolean NOT
;
; 布尔标志可用 1, On, True or Yes 这些值置于开的状态。
; 它们可用 0, Off, False or No 这些值置于关的状态。
;
; 一个空字符串可以用在等号后不写任何东西表示,或者用 None 关键字:
;
;  foo =  ; 将foo置为空字符串
; foo = none ; 将foo置为空字符串
; foo = "none"     ; 将foo置为字符串'none'
;
; 如果你值设置中使用常量,而这些常量属于动态调入的扩展库(不是 PHP 的扩展,就是
; Zend 的扩展),你仅可以调入这些扩展的行*之后*使用这些常量。
;
; 所有在 php.ini-dist 文件里设定的值与内建的默认值相同(这是说,如果 php.ini
; 没被使用或者你删掉了这些行,默认值与之相同)。


;;;;;;;;;;;;;;;;;;;;
; 语言选项     ;
;;;;;;;;;;;;;;;;;;;;

engine  = On
; 使 PHP scripting language engine(PHP 脚本语言引擎)在 Apache下有效。
short_open_tag = On
; 允许 tags 将被识别。
asp_tags = Off
; 允许ASP-style tags
precision = 14
; 浮点类型数显示时的有效位数

y2k_compliance = Off
; 是否打开 2000年适应 (可能在非Y2K适应的浏览器中导致问题)

output_buffering = Off
; 输出缓存允许你甚至在输出正文内容之后发送 header(标头,包括cookies)行
; 其代价是输出层减慢一点点速度。你可以使用输出缓存在运行时打开输出缓存,
; 或者在这里将指示设为 On 而使得所有文件的输出缓存打开。
output_handler = ; 你可以重定向你的脚本的所有输出到一个函数,
    ; 那样做可能对处理或以日志记录它有用。
    ; 例如若你将这个output_handler 设为"ob_gzhandler",
    ; 则输出会被透明地为支持gzip或deflate编码的浏览器压缩。
    ; 设一个输出处理器自动地打开输出缓冲。

implicit_flush = Off
; 强制flush(刷新)让PHP 告诉输出层在每个输出块之后自动刷新自身数据。
; 这等效于在每个 print() 或 echo() 调用和每个 HTML 块后调用flush()函数。
; 打开这项设置会导致严重的运行时冲突,建议仅在debug过程中打开。

allow_call_time_pass_reference = On
; 是否让强迫函数调用时按引用传递参数。这一方法遭到抗议,
; 并可能在将来版本的PHP/Zend里不再支持。
; 受到鼓励的指定哪些参数按引用传递的方法是在函数声明里。
; 你被鼓励尝试关闭这一选项并确认你的脚本仍能正常工作,以保证在将来版本的语言里
; 它们仍能工作。(你将在每次使用该特点时得到一个警告,而参数将按值而不是按引用
; 传递)。

; Safe Mode 安全模式
safe_mode = Off
safe_mode_exec_dir =
safe_mode_allowed_env_vars = PHP_  
; ?Setting certain environment variables
; ?may be a potential security breach.
; 该指示包含用逗号分隔的前缀列表。安全模式中,用户仅可以替换
; 以在此列出的前缀开头的环境变量的值。
; 默认地,用户将仅能 设定以PHP_开头的环境变量,(如: PHP_FOO=BAR)。
; 注意: 如果这一指示为空,PHP 将让用户更改任意环境变量!

safe_mode_protected_env_vars = LD_LIBRARY_PATH
; 这条指示包含一个用逗号分隔的环境变量列表,那是最终用户将不能用putenv () 更改的。
; 这些变量甚至在safe_mode_allowed_env_vars 设置为允许的情况下得到保护。

disable_functions =    
; 这条指示让你可以为了安全的原因让特定函数失效。
; 它接受一个用逗号分隔的函数名列表。
; 这条指示 *不受* 安全模式是否打开的影响。

; 语法高亮模式的色彩。
; 只要能被接受的东西就能工作。

highlight.string = #DD0000
highlight.comment = #FF8000
highlight.keyword = #007700
highlight.bg = #FFFFFF
highlight.default = #0000BB
highlight.html = #000000

; Misc 杂项
expose_php = Off
; 决定 PHP 是否标示它装在服务器上的事实(例如:加在它 —PHP—给Web服务
; 发送的信号上)。
; (我个人的意见,在出现什么power-by的header的时候,把这关掉。)
; 它不会有安全上的威胁, 但它使检查你的服务器上是否安装了PHP成为了可能。


;;;;;;;;;;;;;;;;;;;
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;

max_execution_time = 30   ; 每个脚本的最大执行时间, 按秒计
memory_limit = 8388608 ; 一个脚本最大可使用的内存总量 (这里是8MB)


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Error handling and logging ;
;   出错控制和登记    ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 错误报告是按位的。或者将数字加起来得到想要的错误报告等级。
; E_ALL  - 所有的错误和警告
; E_ERROR  - 致命性运行时错
; E_WARNING  - 运行时警告(非致命性错)
; E_PARSE  - 编译时解析错误
; E_NOTICE  - 运行时提醒(这些经常是是你的代码的bug引起的,
               ;也可能是有意的行为造成的。(如:基于未初始化的变量自动初始化为

一个
              ;空字符串的事实而使用一个未初始化的变量)

; E_CORE_ERROR - 发生于PHP启动时初始化过程中的致命错误
; E_CORE_WARNING - 发生于PHP启动时初始化过程中的警告(非致命性错)
; E_COMPILE_ERROR - 编译时致命性错
; E_COMPILE_WARNING - 编译时警告(非致命性错)
; E_USER_ERROR - 用户产生的出错消息
; E_USER_WARNING - 用户产生的警告消息
; E_USER_NOTICE - 用户产生的提醒消息
; 例子:
; error_reporting = E_ALL & ~E_NOTICE   ; 显示所有的错误,除了提醒
; error_reporting = E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR ; 仅显示错误
error_reporting = E_ALL & ~E_NOTICE ; 显示所有的错误,除了提醒
display_errors = On ; 显示出错误信息(作为输出的一部分)
   ; 在最终发布的web站点上,强烈建议你关掉这个特性,并使用
   ; 错误日志代替(参看下面)。
   ; 在最终发布的web站点继续让 display_errors 有效可能
   ; 暴露一些有关安全的信息,例如你的web服务上的文件路径、
   ; 你的数据库规划或别的信息。
display_startup_errors = Off ; 甚至当display_erroes打开了,发生于PHP的启动的步骤中
     ; 的错误也不会被显示。
     ; 强烈建议保持使 display_startup_errors 关闭,
     ; 除了在改错过程中。
log_errors = Off ; 在日志文件里记录错误(服务器指定的日志,stderr标准错误输出,或error_log(

下面的))
   ; 正如上面说明的那样,强烈建议你在最终发布的web站点以日志记录错误
   ; 取代直接错误输出。

track_errors = Off ; 保存最近一个 错误/警告 消息于变量 $php_errormsg (boolean)
;error_prepend_string = ""  ; 于错误信息前输出的字符串
;error_append_string = ""        ; 于错误信息后输出的字符串
;error_log = filename ; 记录错误日志于指定文件
;error_log = syslog ; 记录错误日志于系统日志 syslog (NT 下的事件日志, Windows 95下无效)
warn_plus_overloading = Off ; 当将‘+’用于字符串时警告


;;;;;;;;;;;;;;;;;
; Data Handling ;
;;;;;;;;;;;;;;;;;
variables_order = "EGPCS" ; 这条指示描述了PHP 记录
    ; GET, POST, Cookie, Environment and Built-in 这些变量的顺序。
    ; (以 G, P, C, E & S 代表,通常以 EGPCS 或 GPC 的方式引用)。
    ; 按从左到右记录,新值取代旧值。

register_globals = On ; 是否将这些 EGPCS 变量注册为全局变量。
    ; 若你不想让用户数据不在全局范围内混乱的话,你可能想关闭它。
    ; 这和 track_vars 连起来用更有意义 — 这样你可以通过
    ; $HTTP_*_VARS[] 数组访问所有的GPC变量。

register_argc_argv = On ; 这条指示告诉 PHP 是否声明 argv和argc 变量
; (注:这里argv为数组,argc为变量数)
    ; (其中包含用GET方法传来的数据)。
    ; 若你不想用这些变量,你应当关掉它以提高性能。

track_vars  = On ; 使$HTTP_*_VARS[]数组有效,这里*在使用时用
    ; ENV, POST, GET, COOKIE or SERVER替换
post_max_size = 8M ; PHP将接受的POST数据最大大小。


gpc_order  = "GPC" ; 这条指示被人反对。用 variables_order 代替。

; Magic quotes
magic_quotes_gpc = On ; 在输入的GET/POST/Cookie数据里使用魔术引用
; (原文就这样,呵呵,所谓magic quotes 应该是指用转义符加在引用性的控制字符上,如 \'....)
magic_quotes_runtime= Off ; 对运行时产生的数据使用魔术引用,
   ; 例如:用SQL查询得到的数据,用exec()函数得到的数据,等等
magic_quotes_sybase = Off ; 采用 Sybase形式的魔术引用(用 '' 脱出 ' 而不用 \')

; 自动在 PHP 文档之前和之后添加文件
auto_prepend_file =
auto_append_file =

; 象4.04b4一样,PHP 默认地总是在 “Content-type:” 头标输出一个字符的编码方式。
; 让输出字符集失效,只要设置为空。
; PHP 的内建默认值是 text/html
default_mimetype = "text/html"
;default_charset = "iso-8859-1"

;;;;;;;;;;;;;;;;;;;;;;;;;
; Paths and Directories ;
;;;;;;;;;;;;;;;;;;;;;;;;;
include_path =          ; include 路径设置,UNIX: "/path1:/path2" Windows:

"\path1;\path2"
doc_root =   ; php 页面的根路径,仅在非空时有效
user_dir =   ; 告知 php 在使用 /~username 打开脚本时到哪个目录下去找,仅在非空时有效
;upload_tmp_dir =         ; 存放用HTTP协议上载的文件的临时目录(在没指定时使用系统默

认的)
upload_max_filesize = 2097152    ; 文件上载默认地限制为2 Meg
extension_dir = c:\php\  ; 存放可加载的扩充库(模块)的目录
enable_dl = On  ; 是否使dl()有效。
     ; 在多线程的服务器上 dl()函数*不能*很好地工作,
     ; 例如IIS or Zeus,并在其上默认为禁止


;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;
file_uploads = On  ; 是否允许HTTP方式文件上载
;upload_tmp_dir =         ; 用于HTTP上载的文件的临时目录(未指定则使用系统默认)
upload_max_filesize = 2M   ; 上载文件的最大许可大小

; Fopen wrappers ;
;;;;;;;;;;;;;;;;;;
allow_url_fopen = On        ; 是否允许把URLs当作http:.. 或把文件当作ftp:...


;;;;;;;;;;;;;;;;;;;;;;
;   动态扩展   ;
; Dynamic Extensions ;
;;;;;;;;;;;;;;;;;;;;;;
; 若你希望一个扩展库自动加载,用下面的语法:
;  extension=modulename.extension
; 例如,在windows上,
; extension=msql.dll
; or 在UNIX下,
; extension=msql.so
; 注意,这只应当是模块的名字,不需要目录信息放在里面。
; 用上面的 extension_dir 指示指定扩展库的位置。


;Windows 扩展
;extension=php_nsmail.dll
extension=php_calendar.dll
;extension=php_dbase.dll
;extension=php_filepro.dll
extension=php_gd.dll
;extension=php_dbm.dll
;extension=php_mssql.dll
;extension=php_zlib.dll
;extension=php_filepro.dll
;extension=php_imap4r2.dll
;extension=php_ldap.dll
;extension=php_crypt.dll
;extension=php_msql2.dll
;extension=php_odbc.dll
; 注意, MySQL的支持现在是内建的,因此,不需要用它的dll


;;;;;;;;;;;;;;;;;;;
;   模块设定  ;
; Module Settings ;
;;;;;;;;;;;;;;;;;;;

[Syslog]
define_syslog_variables = Off ; 是否定义各种的系统日志变量
    ; 如:$LOG_PID, $LOG_CRON, 等等。
    ; 关掉它是个提高效率的好主意。
    ; 运行时,你可以调用函数define_syslog_variables(),来定义这些变量


[mail function]
SMTP  = localhost  ;仅用于win32系统
sendmail_from = me@localhost.com ;仅用于win32系统
;sendmail_path =   ;仅用于unix, 也可支持参数(默认的是'sendmail -t -i')

[Debugger]
debugger.host = localhost
debugger.port = 7869
debugger.enabled = False

[Logging]
; 这些配置指示用于示例的日志记录机制。
; 看 examples/README.logging 以得到更多的解释
;logging.method  = db
;logging.directory = /path/to/log/directory

[Java]
;java.class.path = .\php_java.jar
;java.home = c:\jdk
;java.library = c:\jdk\jre\bin\hotspot\jvm.dll
;java.library.path = .\

[SQL]
sql.safe_mode = Off

[ODBC]
;uodbc.default_db = Not yet implemented
;uodbc.default_user = Not yet implemented
;uodbc.default_pw = Not yet implemented
uodbc.allow_persistent = On ; 允许或禁止 持久连接
uodbc.check_persistent = On ; 在重用前检查连接是否还可用
uodbc.max_persistent = -1 ; 持久连接的最大数。-1 代表无限制
uodbc.max_links  = -1 ; 连接的最大数目(持久和非持久)。-1 代表无限制
uodbc.defaultlrl = 4096 ; 控制 LONG 类型的字段。返回变量的字节数,0 代表通过(?)0 means

passthru
uodbc.defaultbinmode = 1 ; 控制 二进制数据。0 代表?????Handling of binary data. 0 means

passthru, 1 return as is, 2 convert to char
; 见有关 odbc_binmode 和 odbc_longreadlen 的文档以得到 uodbc.defaultlrl 和

uodbc.defaultbinmode 的解释。

[MySQL]
mysql.allow_persistent = On ; 允许或禁止 持久连接
mysql.max_persistent = -1 ; 持久连接的最大数。-1 代表无限制
mysql.max_links  = -1 ; 连接的最大数目(持久和非持久)。-1 代表无限制
mysql.default_port = ; mysql_connect() 使用的默认端口,如不设置,mysql_connect()
    ; 将使用变量 $MYSQL_TCP_PORT,或在/etc/services 下的mysql-tcp 条目(unix),
    ; 或在编译是定义的 MYSQL_PORT(按这样的顺序)
    ; Win32环境,将仅检查MYSQL_PORT。
mysql.default_socket = ; 用于本地 MySql 连接的默认的套接字名。为空,使用 MYSQL 内建值

mysql.default_host = ; mysql_connect() 默认使用的主机(安全模式下无效)
mysql.default_user = ; mysql_connect() 默认使用的用户名(安全模式下无效)
mysql.default_password = ; mysql_connect() 默认使用的密码(安全模式下无效)
    ; 注意,在这个文件下保存密码通常是一个*坏*主意
    ; *任何*可以使用PHP访问的用户可以运行
    ; 'echo cfg_get_var("mysql.default_password")'来显示那个密码!
    ; 而且当然地,任何有读该文件权力的用户也能看到那个密码。

[mSQL]
msql.allow_persistent = On ; 允许或禁止 持久连接
msql.max_persistent = -1 ; 持久连接的最大数。-1 代表无限制
msql.max_links  = -1 ; 连接的最大数目(持久和非持久)。-1 代表无限制

[PostgresSQL]
pgsql.allow_persistent = On ; 允许或禁止 持久连接
pgsql.max_persistent = -1 ; 持久连接的最大数。-1 代表无限制
pgsql.max_links  = -1 ; 连接的最大数目(持久和非持久)。-1 代表无限制

[Sybase]
sybase.allow_persistent = On ; 允许或禁止 持久连接
sybase.max_persistent = -1 ; 持久连接的最大数。-1 代表无限制
sybase.max_links = -1 ; 连接的最大数目(持久和非持久)。-1 代表无限制
;sybase.interface_file = "/usr/sybase/interfaces"
sybase.min_error_severity = 10 ; 显示的错误的最低严重性
sybase.min_message_severity = 10 ; 显示的消息的最低重要性
sybase.compatability_mode = Off ; 与旧版的PHP 3.0 兼容的模式。若打开,这将导致 PHP 自动地
     ; 把根据结果的 Sybase 类型赋予它们,
     ; 而不是把它们全当成字符串。
     ; 这个兼容模式不会永远留着,
     ; 因此,将你的代码进行需要的修改,
     ; 并将该项关闭。

[Sybase-CT]
sybct.allow_persistent = On ; 允许或禁止 持久连接
sybct.max_persistent = -1 ; 持久连接的最大数。-1 代表无限制
sybct.max_links  = -1 ; 连接的最大数目(持久和非持久)。-1 代表无限制
sybct.min_server_severity = 10 ; 显示的错误的最低严重性
sybct.min_client_severity = 10 ; 显示的消息的最低重要性

[bcmath]
bcmath.scale = 0 ; 用于所有bcmath函数的10十进制数数字的个数number of decimal digits for all

bcmath functions

[browscap]
;browscap = extra/browscap.ini
browscap = C:\WIN\SYSTEM\inetsrv\browscap.ini
[Informix]
ifx.default_host = ; ifx_connect() 默认使用的主机(安全模式下无效)
ifx.default_user = ; ifx_connect() 默认使用的用户名(安全模式下无效)
ifx.default_password = ; ifx_connect() 默认使用的密码(安全模式下无效)
ifx.allow_persistent = On ; 允许或禁止 持久连接
ifx.max_persistent = -1 ; 持久连接的最大数。-1 代表无限制
ifx.max_links  = -1 ; 连接的最大数目(持久和非持久)。-1 代表无限制
ifx.textasvarchar = 0 ; 若打开,select 状态符返回一个 ‘text blob’字段的内容,而不是它的id
ifx.byteasvarchar = 0 ; 若打开,select 状态符返回一个 ‘byte blob’字段的内容,而不是它的id
ifx.charasvarchar = 0 ; 追踪从固定长度的字符列里剥离的空格。
   ; 可能对 Informix SE 用户有效。
ifx.blobinfile  = 0 ; 若打开,text和byte blobs 的内容被导出到一个文件
   ; 而不是保存到内存。
ifx.nullformat  = 0 ; NULL(空)被作为空字段返回,除非,这里被设为1。
   ; 这种情况下(为1),NULL作为字串NULL返回。

[Session]
session.save_handler   = files  ; 用于保存/取回数据的控制方式
session.save_path     = C:\win\temp  ; 在 save_handler 设为文件时传给控制器的参数,
                  ; 这是数据文件将保存的路径。
session.use_cookies    = 1    ; 是否使用cookies
session.name       = PHPSESSID 
                  ; 用在cookie里的session的名字
session.auto_start    = 0    ; 在请求启动时初始化session
session.cookie_lifetime  = 0    ; 为按秒记的cookie的保存时间,
                  ; 或为0时,直到浏览器被重启
session.cookie_path    = /    ; cookie的有效路径
session.cookie_domain   =     ; cookie的有效域
session.serialize_handler = php   ; 用于连接数据的控制器
                  ; php是 PHP 的标准控制器。
session.gc_probability  = 1    ; 按百分比的'garbage collection(碎片整理)'进程
                  ; 在每次 session 初始化的时候开始的可能性。
session.gc_maxlifetime  = 1440  ; 在这里数字所指的秒数后,保存的数据将被视为
                  ; '碎片(garbage)'并由gc 进程清理掉。
session.referer_check   =     ; 检查 HTTP引用以使额外包含于URLs中的ids无效
session.entropy_length  = 0    ; 从文件中读取多少字节
session.entropy_file   =     ; 指定这里建立 session id
; session.entropy_length  = 16
; session.entropy_file   = /dev/urandom
session.cache_limiter   = nocache ; 设为{nocache,private,public},以决定 HTTP 的
                  ; 缓存问题
session.cache_expire   = 180   ; 文档在 n 分钟后过时
session.use_trans_sid   = 1    ; 使用过渡性的 sid 支持,若编译时许可了
                  ; --enable-trans-sid
url_rewriter.tags     = "a=href,area=href,frame=src,input=src,form=fakeentry"

[MSSQL]
;extension=php_mssql.dll
mssql.allow_persistent = On ; 允许或禁止 持久连接
mssql.max_persistent = -1 ; 持久连接的最大数。-1 代表无限制
mssql.max_links  = -1 ; 连接的最大数目(持久和非持久)。-1 代表无限制
mssql.min_error_severity = 10 ; 显示的错误的最低严重性
mssql.min_message_severity = 10 ; 显示的消息的最低重要性
mssql.compatability_mode = Off ; 与旧版的PHP 3.0 兼容的模式。

[Assertion]
; ?????
;assert.active  = On ; ?assert(expr); active by default
;assert.warning  = On ; issue a PHP warning for each failed assertion.
;assert.bail  = Off ; don't bail out by default.
;assert.callback  = 0 ; user-function to be called if an assertion fails.
;assert.quiet_eval  = 0 ; eval the expression with current error_reporting(). set to true

if you want error_reporting(0) around the eval().

[Ingres II]
ii.allow_persistent  = On ; 允许或禁止 持久连接
ii.max_persistent  = -1 ; 持久连接的最大数。-1 代表无限制
ii.max_links  = -1 ; 连接的最大数目(持久和非持久)。-1 代表无限制
ii.default_database  = ; 默认 database (format : [node_id::]dbname[/srv_class]
ii.default_user  = ; 默认 user
ii.default_password  = ; 默认 password

[Verisign Payflow Pro]
pfpro.defaulthost  = "test.signio.com" ; 默认的 Signio 服务器
pfpro.defaultport  = 443 ; 连接的默认端口
pfpro.defaulttimeout = 30 ; 按秒计的默认超时时间

; pfpro.proxyaddress = ; 默认的代理的 IP 地址(如果需要)
; pfpro.proxyport  = ; 默认的代理的端口
; pfpro.proxylogon  = ; 默认的代理的登录(logon 用户名)
; pfpro.proxypassword = ; 默认的代理的密码

[Sockets]
sockets.use_system_read = On ; 使用系统的read() 函数替代 php_read()封装
; Local Variables:   (局部变量)
; tab-width: 4
; End:


我们一直在努力!

[楼 主] | Posted: 2005-03-26 14:55 顶端


admin



ID号: 1
级别: 管理员
精华: 34
发帖: 982
积分: 31 点
金币: 196 块
贡献值: 24 点
在线时间:11(小时)
注册时间:2004-05-30
最后登录:2006-08-10
来自:隆安县教育局

php.ini中文版


作者:中国论坛网收集 来源:http://www.51one.net 加入时间:2004-8-25  

[php]
; PHP还是一个不断发展的工具,其功能还在不断地删减
; 而php.ini的设置更改可以反映出相当的变化,
; 在使用新的PHP版本前,研究一下php.ini会有好处的

;;;;;;;;;;;;;;;;;;;
; 关于这个文件 ;
;;;;;;;;;;;;;;;;;;;

; 这个文件控制了PHP许多方面的观点。为了让PHP读取这个文件,它必须被命名为
; \'\'php.ini\'\'。PHP 将在这些地方依次查找该文件:当前工作目录;环境变量PHPRC
; 指明的路径;编译时指定的路径。
; 在windows下,编译时的路径是Windows安装目录。
; 在命令行模式下,php.ini的查找路径可以用 -c 参数替代。

; 该文件的语法非常简单。空白字符和用分号\'\';\'\'开始的行被简单地忽略(就象你可能
; 猜到的一样)。 章节标题(例如 : [Foo])也被简单地忽略,即使将来它们可能
; 有某种的意义。
;
; 指示被指定使用如下语法:
; 指示标识符 = 值
; directive = value
; 指示标识符 是 *大小写敏感的* - foo=bar 不同于 FOO = bar。
;
; 值可以是一个字符串,一个数字,一个 PHP 常量 (如: E_ALL or M_PI), INI 常量中的
; 一个 (On, Off, True, False, Yes, No and None) ,或是一个表达式
; (如: E_ALL & ~E_NOTICE), 或是用引号括起来的字符串(\"foo\").
;
; INI 文件的表达式被限制于位运算符和括号。
; | bitwise OR
; & bitwise AND
; ~ bitwise NOT
; ! boolean NOT
;
; 布尔标志可用 1, On, True or Yes 这些值置于开的状态。
; 它们可用 0, Off, False or No 这些值置于关的状态。
;
; 一个空字符串可以用在等号后不写任何东西表示,或者用 None 关键字:
;
; foo = ; 将foo置为空字符串
; foo = none ; 将foo置为空字符串
; foo = \"none\" ; 将foo置为字符串\'\'none\'\'
;
; 如果你值设置中使用常量,而这些常量属于动态调入的扩展库(不是 PHP 的扩展,就是
; Zend 的扩展),你仅可以调入这些扩展的行*之后*使用这些常量。
;
; 所有在 php.ini-dist 文件里设定的值与内建的默认值相同(这是说,如果 php.ini
; 没被使用或者你删掉了这些行,默认值与之相同)。


;;;;;;;;;;;;;;;;;;;;
; 语言选项 ;
;;;;;;;;;;;;;;;;;;;;

engine = On
; 使 PHP scripting language engine(PHP 脚本语言引擎)在 Apache下有效。
short_open_tag = On
; 允许 tags 将被识别。
asp_tags = Off
; 允许ASP-style tags
precision = 14
; 浮点类型数显示时的有效位数

y2k_compliance = Off
; 是否打开 2000年适应 (可能在非Y2K适应的浏览器中导致问题)

output_buffering = Off
; 输出缓存允许你甚至在输出正文内容之后发送 header(标头,包括cookies)行
; 其代价是输出层减慢一点点速度。你可以使用输出缓存在运行时打开输出缓存,
; 或者在这里将指示设为 On 而使得所有文件的输出缓存打开。
output_handler = ; 你可以重定向你的脚本的所有输出到一个函数,
; 那样做可能对处理或以日志记录它有用。
; 例如若你将这个output_handler 设为\"ob_gzhandler\",
; 则输出会被透明地为支持gzip或deflate编码的浏览器压缩。
; 设一个输出处理器自动地打开输出缓冲。

implicit_flush = Off
; 强制flush(刷新)让PHP 告诉输出层在每个输出块之后自动刷新自身数据。
; 这等效于在每个 print() 或 echo() 调用和每个 HTML 块后调用flush()函数。
; 打开这项设置会导致严重的运行时冲突,建议仅在debug过程中打开。

allow_call_time_pass_reference = On
; 是否让强迫函数调用时按引用传递参数。这一方法遭到抗议,
; 并可能在将来版本的PHP/Zend里不再支持。
; 受到鼓励的指定哪些参数按引用传递的方法是在函数声明里。
; 你被鼓励尝试关闭这一选项并确认你的脚本仍能正常工作,以保证在将来版本的语言里
; 它们仍能工作。(你将在每次使用该特点时得到一个警告,而参数将按值而不是按引用
; 传递)。

; Safe Mode 安全模式
safe_mode = Off
safe_mode_exec_dir =
safe_mode_allowed_env_vars = PHP_
; ?Setting certain environment variables
; ?may be a potential security breach.
; 该指示包含用逗号分隔的前缀列表。安全模式中,用户仅可以替换
; 以在此列出的前缀开头的环境变量的值。
; 默认地,用户将仅能 设定以PHP_开头的环境变量,(如: PHP_FOO=BAR)。
; 注意: 如果这一指示为空,PHP 将让用户更改任意环境变量!

safe_mode_protected_env_vars = LD_LIBRARY_PATH
; 这条指示包含一个用逗号分隔的环境变量列表,那是最终用户将不能用putenv () 更改的。
; 这些变量甚至在safe_mode_allowed_env_vars 设置为允许的情况下得到保护。

disable_functions =
; 这条指示让你可以为了安全的原因让特定函数失效。
; 它接受一个用逗号分隔的函数名列表。
; 这条指示 *不受* 安全模式是否打开的影响。

; 语法高亮模式的色彩。
; 只要能被接受的东西就能工作。
highlight.string = #DD0000
highlight.comment = #FF8000
highlight.keyword = #007700
highlight.bg = #FFFFFF
highlight.default = #0000BB
highlight.html = #000000

; Misc 杂项
expose_php = Off
; 决定 PHP 是否标示它装在服务器上的事实(例如:加在它 —PHP—给Web服务
; 发送的信号上)。
; (我个人的意见,在出现什么power-by的header的时候,把这关掉。)
; 它不会有安全上的威胁, 但它使检查你的服务器上是否安装了PHP成为了可能。


;;;;;;;;;;;;;;;;;;;
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;

max_execution_time = 30 ; 每个脚本的最大执行时间, 按秒计
memory_limit = 8388608 ; 一个脚本最大可使用的内存总量 (这里是8M


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Error handling and logging ;
; 出错控制和登记 ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 错误报告是按位的。或者将数字加起来得到想要的错误报告等级。
; E_ALL - 所有的错误和警告
; E_ERROR - 致命性运行时错
; E_WARNING - 运行时警告(非致命性错)
; E_PARSE - 编译时解析错误
; E_NOTICE - 运行时提醒(这些经常是是你的代码的bug引起的,
;也可能是有意的行为造成的。(如:基于未初始化的变量自动初始化为一个
;空字符串的事实而使用一个未初始化的变量)

; E_CORE_ERROR - 发生于PHP启动时初始化过程中的致命错误
; E_CORE_WARNING - 发生于PHP启动时初始化过程中的警告(非致命性错)
; E_COMPILE_ERROR - 编译时致命性错
; E_COMPILE_WARNING - 编译时警告(非致命性错)
; E_USER_ERROR - 用户产生的出错消息
; E_USER_WARNING - 用户产生的警告消息
; E_USER_NOTICE - 用户产生的提醒消息
; 例子:
; error_reporting = E_ALL & ~E_NOTICE ; 显示所有的错误,除了提醒
; error_reporting = E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR ; 仅显示错误
error_reporting = E_ALL & ~E_NOTICE ; 显示所有的错误,除了提醒
display_errors = On ; 显示出错误信息(作为输出的一部分)
; 在最终发布的web站点上,强烈建议你关掉这个特性,并使用
; 错误日志代替(参看下面)。
; 在最终发布的web站点继续让 display_errors 有效可能
; 暴露一些有关安全的信息,例如你的web服务上的文件路径、
; 你的数据库规划或别的信息。
display_startup_errors = Off ; 甚至当display_erroes打开了,发生于PHP的启动的步骤中
; 的错误也不会被显示。
; 强烈建议保持使 display_startup_errors 关闭,
; 除了在改错过程中。
log_errors = Off ; 在日志文件里记录错误(服务器指定的日志,stderr标准错误输出,或error_log(

下面的))
; 正如上面说明的那样,强烈建议你在最终发布的web站点以日志记录错误
; 取代直接错误输出。

track_errors = Off ; 保存最近一个 错误/警告 消息于变量 $php_errormsg (boolean)
;error_prepend_string = \"\" ; 于错误信息前输出的字符串
;error_append_string = \"\" ; 于错误信息后输出的字符串
;error_log = filename ; 记录错误日志于指定文件
;error_log = syslog ; 记录错误日志于系统日志 syslog (NT 下的事件日志, Windows 95下无效)
warn_plus_overloading = Off ; 当将‘+’用于字符串时警告


;;;;;;;;;;;;;;;;;
; Data Handling ;
;;;;;;;;;;;;;;;;;
variables_order = \"EGPCS\" ; 这条指示描述了PHP 记录
; GET, POST, Cookie, Environment and Built-in 这些变量的顺序。
; (以 G, P, C, E & S 代表,通常以 EGPCS 或 GPC 的方式引用)。
; 按从左到右记录,新值取代旧值。

register_globals = On ; 是否将这些 EGPCS 变量注册为全局变量。
; 若你不想让用户数据不在全局范围内混乱的话,你可能想关闭它。
; 这和 track_vars 连起来用更有意义 — 这样你可以通过
; $HTTP_*_VARS[] 数组访问所有的GPC变量。

register_argc_argv = On ; 这条指示告诉 PHP 是否声明 argv和argc 变量
; (注:这里argv为数组,argc为变量数)
; (其中包含用GET方法传来的数据)。
; 若你不想用这些变量,你应当关掉它以提高性能。

track_vars = On ; 使$HTTP_*_VARS[]数组有效,这里*在使用时用
; ENV, POST, GET, COOKIE or SERVER替换
post_max_size = 8M ; PHP将接受的POST数据最大大小。


gpc_order = \"GPC\" ; 这条指示被人反对。用 variables_order 代替。

; Magic quotes
magic_quotes_gpc = On ; 在输入的GET/POST/Cookie数据里使用魔术引用
; (原文就这样,呵呵,所谓magic quotes 应该是指用转义符加在引用性的控制字符上,如 \'\'....)
magic_quotes_runtime= Off ; 对运行时产生的数据使用魔术引用,
; 例如:用SQL查询得到的数据,用exec()函数得到的数据,等等
magic_quotes_sybase = Off ; 采用 Sybase形式的魔术引用(用 \'\'\'\' 脱出 \'\' 而不用 \'\')

; 自动在 PHP 文档之前和之后添加文件
auto_prepend_file =
auto_append_file =

; 象4.04b4一样,PHP 默认地总是在 “Content-type:” 头标输出一个字符的编码方式。
; 让输出字符集失效,只要设置为空。
; PHP 的内建默认值是 text/html
default_mimetype = \"text/html\"
;default_charset = \"iso-8859-1\"

;;;;;;;;;;;;;;;;;;;;;;;;;
; Paths and Directories ;
;;;;;;;;;;;;;;;;;;;;;;;;;
include_path = ; include 路径设置,UNIX: \"/path1:/path2\" Windows: \"\\path1;\\path2\"
doc_root = ; php 页面的根路径,仅在非空时有效
user_dir = ; 告知 php 在使用 /~username 打开脚本时到哪个目录下去找,仅在非空时有效
;upload_tmp_dir = ; 存放用HTTP协议上载的文件的临时目录(在没指定时使用系统默认的)
upload_max_filesize = 2097152 ; 文件上载默认地限制为2 Meg
extension_dir = c:\\php\\ ; 存放可加载的扩充库(模块)的目录
enable_dl = On ; 是否使dl()有效。
; 在多线程的服务器上 dl()函数*不能*很好地工作,
; 例如IIS or Zeus,并在其上默认为禁止


;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;
file_uploads = On ; 是否允许HTTP方式文件上载
;upload_tmp_dir = ; 用于HTTP上载的文件的临时目录(未指定则使用系统默认)
upload_max_filesize = 2M ; 上载文件的最大许可大小

; Fopen wrappers ;
;;;;;;;;;;;;;;;;;;
allow_url_fopen = On ; 是否允许把URLs当作http:.. 或把文件当作ftp:...
;;;;;;;;;;;;;;;;;;;;;;
; 动态扩展 ;
; Dynamic Extensions ;
;;;;;;;;;;;;;;;;;;;;;;
; 若你希望一个扩展库自动加载,用下面的语法:
; extension=modulename.extension
; 例如,在windows上,
; extension=msql.dll
; or 在UNIX下,
; extension=msql.so
; 注意,这只应当是模块的名字,不需要目录信息放在里面。
; 用上面的 extension_dir 指示指定扩展库的位置。


;Windows 扩展
;extension=php_nsmail.dll
extension=php_calendar.dll
;extension=php_dbase.dll
;extension=php_filepro.dll
extension=php_gd.dll
;extension=php_dbm.dll
;extension=php_mssql.dll
;extension=php_zlib.dll
;extension=php_filepro.dll
;extension=php_imap4r2.dll
;extension=php_ldap.dll
;extension=php_crypt.dll
;extension=php_msql2.dll
;extension=php_odbc.dll
; 注意, MySQL的支持现在是内建的,因此,不需要用它的dll


;;;;;;;;;;;;;;;;;;;
; 模块设定 ;
; Module Settings ;
;;;;;;;;;;;;;;;;;;;

[Syslog]
define_syslog_variables = Off ; 是否定义各种的系统日志变量
; 如:$LOG_PID, $LOG_CRON, 等等。
; 关掉它是个提高效率的好主意。
; 运行时,你可以调用函数define_syslog_variables(),来定义这些变量


[mail function]
SMTP = localhost ;仅用于win32系统
sendmail_from = me@localhost.com ;仅用于win32系统
;sendmail_path = ;仅用于unix, 也可支持参数(默认的是\'\'sendmail -t -i\'\')
[Debugger]
debugger.host = localhost
debugger.port = 7869
debugger.enabled = False

[Logging]
; 这些配置指示用于示例的日志记录机制。
; 看 examples/README.logging 以得到更多的解释
;logging.method = db
;logging.directory = /path/to/log/directory

[Java]
;java.class.path = .\\php_java.jar
;java.home = c:\\jdk
;java.library = c:\\jdk\\jre\\bin\\hotspot\\jvm.dll
;java.library.path = .\\

[SQL]
sql.safe_mode = Off

[ODBC]
;uodbc.default_db = Not yet implemented
;uodbc.default_user = Not yet implemented
;uodbc.default_pw = Not yet implemented
uodbc.allow_persistent = On ; 允许或禁止 持久连接
uodbc.check_persistent = On ; 在重用前检查连接是否还可用
uodbc.max_persistent = -1 ; 持久连接的最大数。-1 代表无限制
uodbc.max_links = -1 ; 连接的最大数目(持久和非持久)。-1 代表无限制
uodbc.defaultlrl = 4096 ; 控制 LONG 类型的字段。返回变量的字节数,0 代表通过(?)0 means

passthru
uodbc.defaultbinmode = 1 ; 控制 二进制数据。0 代表?????Handling of binary data. 0 means

passthru, 1 return as is, 2 convert to char
; 见有关 odbc_binmode 和 odbc_longreadlen 的文档以得到 uodbc.defaultlrl 和

uodbc.defaultbinmode 的解释。

[MySQL]
mysql.allow_persistent = On ; 允许或禁止 持久连接
mysql.max_persistent = -1 ; 持久连接的最大数。-1 代表无限制
mysql.max_links = -1 ; 连接的最大数目(持久和非持久)。-1 代表无限制
mysql.default_port = ; mysql_connect() 使用的默认端口,如不设置,mysql_connect()
; 将使用变量 $MYSQL_TCP_PORT,或在/etc/services 下的mysql-tcp 条目(unix),
; 或在编译是定义的 MYSQL_PORT(按这样的顺序)
; Win32环境,将仅检查MYSQL_PORT。
mysql.default_socket = ; 用于本地 MySql 连接的默认的套接字名。为空,使用 MYSQL 内建值

mysql.default_host = ; mysql_connect() 默认使用的主机(安全模式下无效)
mysql.default_user = ; mysql_connect() 默认使用的用户名(安全模式下无效)
mysql.default_password = ; mysql_connect() 默认使用的密码(安全模式下无效)
; 注意,在这个文件下保存密码通常是一个*坏*主意
; *任何*可以使用PHP访问的用户可以运行
; \'\'echo cfg_get_var(\"mysql.default_password\")\'\'来显示那个密码!
; 而且当然地,任何有读该文件权力的用户也能看到那个密码。

[mSQL]
msql.allow_persistent = On ; 允许或禁止 持久连接
msql.max_persistent = -1 ; 持久连接的最大数。-1 代表无限制
msql.max_links = -1 ; 连接的最大数目(持久和非持久)。-1 代表无限制

[PostgresSQL]
pgsql.allow_persistent = On ; 允许或禁止 持久连接
pgsql.max_persistent = -1 ; 持久连接的最大数。-1 代表无限制
pgsql.max_links = -1 ; 连接的最大数目(持久和非持久)。-1 代表无限制

[Sybase]
sybase.allow_persistent = On ; 允许或禁止 持久连接
sybase.max_persistent = -1 ; 持久连接的最大数。-1 代表无限制
sybase.max_links = -1 ; 连接的最大数目(持久和非持久)。-1 代表无限制
;sybase.interface_file = \"/usr/sybase/interfaces\"
sybase.min_error_severity = 10 ; 显示的错误的最低严重性
sybase.min_message_severity = 10 ; 显示的消息的最低重要性
sybase.compatability_mode = Off ; 与旧版的PHP 3.0 兼容的模式。若打开,这将导致 PHP 自动地
; 把根据结果的 Sybase 类型赋予它们,
; 而不是把它们全当成字符串。
; 这个兼容模式不会永远留着,
; 因此,将你的代码进行需要的修改,
; 并将该项关闭。

[Sybase-CT]
sybct.allow_persistent = On ; 允许或禁止 持久连接
sybct.max_persistent = -1 ; 持久连接的最大数。-1 代表无限制
sybct.max_links = -1 ; 连接的最大数目(持久和非持久)。-1 代表无限制
sybct.min_server_severity = 10 ; 显示的错误的最低严重性
sybct.min_client_severity = 10 ; 显示的消息的最低重要性

[bcmath]
bcmath.scale = 0 ; 用于所有bcmath函数的10十进制数数字的个数number of decimal digits for all

bcmath functions

[browscap]
;browscap = extra/browscap.ini
browscap = C:\\WIN\\SYSTEM\\inetsrv\\browscap.ini
[Informix]
ifx.default_host = ; ifx_connect() 默认使用的主机(安全模式下无效)
ifx.default_user = ; ifx_connect() 默认使用的用户名(安全模式下无效)
ifx.default_password = ; ifx_connect() 默认使用的密码(安全模式下无效)
ifx.allow_persistent = On ; 允许或禁止 持久连接
ifx.max_persistent = -1 ; 持久连接的最大数。-1 代表无限制
ifx.max_links = -1 ; 连接的最大数目(持久和非持久)。-1 代表无限制
ifx.textasvarchar = 0 ; 若打开,select 状态符返回一个 ‘text blob’字段的内容,而不是它的id
ifx.byteasvarchar = 0 ; 若打开,select 状态符返回一个 ‘byte blob’字段的内容,而不是它的id
ifx.charasvarchar = 0 ; 追踪从固定长度的字符列里剥离的空格。
; 可能对 Informix SE 用户有效。
ifx.blobinfile = 0 ; 若打开,text和byte blobs 的内容被导出到一个文件
; 而不是保存到内存。
ifx.nullformat = 0 ; NULL(空)被作为空字段返回,除非,这里被设为1。
; 这种情况下(为1),NULL作为字串NULL返回。

[Session]
session.save_handler = files ; 用于保存/取回数据的控制方式
session.save_path = C:\\win\\temp ; 在 save_handler 设为文件时传给控制器的参数,
3

; 这是数据文件将保存的路径。
session.use_cookies = 1 ; 是否使用cookies
session.name = PHPSESSID
; 用在cookie里的session的名字
session.auto_start = 0 ; 在请求启动时初始化session
session.cookie_lifetime = 0 ; 为按秒记的cookie的保存时间,
; 或为0时,直到浏览器被重启
session.cookie_path = / ; cookie的有效路径
session.cookie_domain = ; cookie的有效域
session.serialize_handler = php ; 用于连接数据的控制器
; php是 PHP 的标准控制器。
session.gc_probability = 1 ; 按百分比的\'\'garbage collection(碎片整理)\'\'进程
; 在每次 session 初始化的时候开始的可能性。
session.gc_maxlifetime = 1440 ; 在这里数字所指的秒数后,保存的数据将被视为
; \'\'碎片(garbage)\'\'并由gc 进程清理掉。
session.referer_check = ; 检查 HTTP引用以使额外包含于URLs中的ids无效
session.entropy_length = 0 ; 从文件中读取多少字节
session.entropy_file = ; 指定这里建立 session id
; session.entropy_length = 16
; session.entropy_file = /dev/urandom
session.cache_limiter = nocache ; 设为{nocache,private,public},以决定 HTTP 的
; 缓存问题
session.cache_expire = 180 ; 文档在 n 分钟后过时
session.use_trans_sid = 1 ; 使用过渡性的 sid 支持,若编译时许可了
; --enable-trans-sid
url_rewriter.tags = \"a=href,area=href,frame=src,input=src,form=fakeentry\"

[MSSQL]
;extension=php_mssql.dll
mssql.allow_persistent = On ; 允许或禁止 持久连接
mssql.max_persistent = -1 ; 持久连接的最大数。-1 代表无限制
mssql.max_links = -1 ; 连接的最大数目(持久和非持久)。-1 代表无限制
mssql.min_error_severity = 10 ; 显示的错误的最低严重性
mssql.min_message_severity = 10 ; 显示的消息的最低重要性
mssql.compatability_mode = Off ; 与旧版的PHP 3.0 兼容的模式。

[Assertion]
; ?????
;assert.active = On ; ?assert(expr); active by default
;assert.warning = On ; issue a PHP warning for each failed assertion.
;assert.bail = Off ; don\'\'t bail out by default.
;assert.callback = 0 ; user-function to be called if an assertion fails.
;assert.quiet_eval = 0 ; eval the expression with current error_reporting(). set to true if

you want error_reporting(0) around the eval().

[Ingres II]
ii.allow_persistent = On ; 允许或禁止 持久连接
ii.max_persistent = -1 ; 持久连接的最大数。-1 代表无限制
ii.max_links = -1 ; 连接的最大数目(持久和非持久)。-1 代表无限制
ii.default_database = ; 默认 database (format : [node_id::]dbname[/srv_class]
ii.default_user = ; 默认 user
ii.default_password = ; 默认 password

[Verisign Payflow Pro]
pfpro.defaulthost = \"test.signio.com\" ; 默认的 Signio 服务器
pfpro.defaultport = 443 ; 连接的默认端口
pfpro.defaulttimeout = 30 ; 按秒计的默认超时时间

; pfpro.proxyaddress = ; 默认的代理的 IP 地址(如果需要)
; pfpro.proxyport = ; 默认的代理的端口
; pfpro.proxylogon = ; 默认的代理的登录(logon 用户名)
; pfpro.proxypassword = ; 默认的代理的密码

[Sockets]
sockets.use_system_read = On ; 使用系统的read() 函数替代 php_read()封装
; Local Variables: (局部变量)
; tab-width: 4
; End:[/php]

园园科技 2005-2-22 05:42


CODE: [复制到剪贴板]
[PHP]

;;;;;;;;;;;;;;;;;;;
; PHP.INI中文说明 ;
;;;;;;;;;;;;;;;;;;;
; 这个文件是PHP安装的默认配置文件.
; 默认设置下, PHP是以程序开发为目的,而不是为了其它目的!
; 由于PHP在应用在您的站点之前必须考虑一些安全问题,
; 所以请您参考php.ini-recommended(被推荐的)中相关参数的设置,
; 另外,您也可以在以下站点获得帮助:http://php.net/manual/en/security.php.


;;;;;;;;;;;;;;;;
; 关于这个文件 ;
;;;;;;;;;;;;;;;;
; 这个文件控制着PHP的许多方面,为了能让PHP正常读取它,这个文件必须被命名为\\"php.ini\\".
; PHP运行时依次在以下路径中寻找这个文件:当前工作目录,环境变量PHPPRC指定路径,编译时
; 指定的路径.
; 在Windows下,编译时指定路径就是Windows的安装目录,
; 在命令提示符下,可以用-c的参数来替代php.ini的查找路径.
;
; 这个配置文件的设置极其简单. 以空白字符和分号开始的行被忽略(可能您已经想到了),
; 虽然它们可能在将来有意义...
;
; 您在配置php.ini时,请使用以下的指定语法:
; 指示 = 值
; 注意:指示标识符是区分大小写的,例如foo=bar和FOO=bar是不同的.
; 值可以是一个字符,一个数字,一个PHP常量(例如E_ALL和M_PI),
; 一个INI常量(例如On,Off,True,False,Yes,No和None),一个表达式(例如E_ALL & ~E_NOTICE),
; 或是用引号括起来的字符串(例如\\"foo\\").
;
; INI文件中的表达式被限制为下面的运算符:
; | 代表 OR
; & 代表 AND
; ~ 代表 NOT(except)
; ! 代表 NOT
;
; 其中布尔值可用1,On,True或Yes表示设为开的状态,
; 可用0,Off,False或No表示设为关的状态.
;
; 一个空字符串可以以在等号后不写任何东西的方法表示,或者用None表示.例如:
;
; foo = ; 将foo值设置为空字符串
; foo = none ; 将foo值设置为空字符串
; foo = \\"none\\" ; 将foo值设置为字符串\'none\'
;
; 如果您在值设置中使用常量,并且这些常量属于动态调入的扩展库(PHP扩展或Zend扩展),
; 那么,您只能在调入这些扩展库之后再使用这些常量.
;
; 所有在 php.ini-dist 文件里设定的值与内建的默认值相同(就是说,如果 php.ini
; 没被使用或者你删掉了这些行,默认值与之相同).


;;;;;;;;;;;
; 语言选项;
;;;;;;;;;;;

; 是否使PHP脚本语言在Apache服务器下有效.
engine = On

; 是否允许使用这种简单的标识格式,当设置为Off时只有这种标识能被识别.
short_open_tag = On

; 是否允许使用ASP风格的标识格式.
asp_tags = Off

; 浮点类型数显示时的有效位数.
precision = 12

; 是否打开2000年适应 (可能在非2000年适应的浏览器中导致问题).
y2k_compliance = Off

; 输出缓存允许你甚至在输出正文内容之后发送header标头(包括cookies), 但这样会使速度有些下降.
; 您可以在运行时使用输出缓存功能,也可以把output_buffering的值设为On使所有文件的输出缓存打
; 开.您也可以使用一个数值(单位是byte)作为输出缓存上限,例如: output_buffering=4096.
output_buffering = 4096

; 您可以把脚本输出到一个函数,
; 字符编码将会自动地转换为您指定的编码,这样可能会对您处理以及记录日志有所帮助.
; 例如,如果您把 output_handler 设为 ob_iconv_handler,
; 输出会为支持gzip或deflate编码的浏览器设一个输出处理器自动地打开输出缓冲.
;
; 说明: 您不必完全依照这个文件中的设置去编写脚本程序,相反地,您应该使用ob_start()函数
; 具体设置,如果您在不了解正在被执行的脚本的情况下使用这个INI文件中的配置,就有
; 可能引起一些问题.
; 您不能同时使用\\"ob_gzhandler\\" 和 \\"zlib.output_compression\\".
;output_handler =

; 输出会为支持压缩使用了zlib库
; 这个选项的有效值是\'off\',\'on\',或者一个具体的值,默认值是4KB.
; 说明: 您可以增大数值来增加执行效率.
; 您必须使用zlib.output_handler来替代标准的output_handler否则输出缓存会失效.
; .
zlib.output_compression = Off

; 如果zlib.output_compression被设为On,您就不能再额外地指定输出的值.
; 在不同在设置下,结果是一样的.
;zlib.output_handler =

; 强制刷新使PHP输出层在每个输出块之后自动刷新自身数据.
; 这等效于在执行每个print()或echo()或每个HTML块后调用flush()函数.
; 打开这项设置可能会在运行时导致严重的冲突,建议仅在debug过程中打开.
implicit_flush = Off

; 得到一个串行变量,并将其转化为PHP值,可能为整型,双精度,字符串,数组,或对象.
; 如果些函数发现了未定义的或类或参数,将会出现提示,如果您想使用这一函数,请设置
; 这个功能.
unserialize_callback_func=

; 是否强迫函数调用时按引用传递参数,在将来的PHP/Zend中,这一功能很可能不会再被支持,
; 建议您把此项设为Off,并在脚本中用函数声明此变量,以便在将来的PHP下正常运行.
allow_call_time_pass_reference = Off

; 安全模式
; 是否启用安全模式
safe_mode = Off

; 默认设置为Off,在打开文件时,安全模式会作一个UID对比检查,如果设置为On,则作GID对比.
safe_mode_gid = Off

; 如果PHP在安全模式下运行,UID/GID检查将在这个命令指定的文件夹及其子文件夹中进行.
safe_mode_include_dir =

; 如果PHP在安全模式下运行,system()和其它执行系统程序的函数都只能执行这个指令所指定
; 的目录
safe_mode_exec_dir =

; 改变某些环境变量可能是一个有效的安全措施.
; 这个指令包括了一个含有符号的前缀.在安全模式下,用户只能改变或设置以这里指定的前缀
; 的名字的环境变量.
; 说明: 如果不指定前缀,PHP会允许用户任意修改环境变量.
safe_mode_allowed_env_vars = PHP_

; 这个指令包含了一个符号,使得用户不能使用putenv()函数修改环境变量.
; 即使safe_mode_allowed_env_vars设置为允许用户修改,这些环境变量也会受到保护.
safe_mode_protected_env_vars = LD_LIBRARY_PATH

; 如果设置了open_basedir,将会使所有被定义的目录及其子目录的操作受到限制,这一指令在
; 每一个目录和每一个虚拟主机构造文件中着很大的作用.不论safe_mode被设置为On或是Off,
; 这个指令都不会受到任何影响.
;open_basedir =

; 这个指令允许您基于安全原因限制某些函数的使用.
; 如果您想禁用多个函数,可以在函数间用逗号隔开. 同样地,
;不论safe_mode被设置为On或是Off,这个指令都不会受到任何影响.
disable_functions =

; 语法以高亮度模式显示的色彩.所有能被接受的东西就可以运行.
;highlight.string = #DD0000
;highlight.comment = #FF9900
;highlight.keyword = #007700
;highlight.bg = #FFFFFF
;highlight.default = #0000BB
;highlight.html = #000000


;;;;;;;;;;;;
; 杂项设置 ;
;;;;;;;;;;;;
; 是否承认您的服务器上安装了PHP这一事实(例如通过附加签名到WEB服务器上)
; 这个指令不会引起安全问题,但它使检查你的服务器上是否安装了PHP有了可能.
expose_php = On


;;;;;;;;;;;;
; 资源限制 ;
;;;;;;;;;;;;

max_execution_time = 15 ; 每个脚本的最大执行时间, 按秒计.
max_input_time = 60 ; 每个脚本的最大读取数据时间, 按秒计.
memory_limit = 8M ; 一个脚本可使用内存的最大值 (这里是8MB).

;;;;;;;;;;;;;;;;;;
; 错误控制和记录 ;
;;;;;;;;;;;;;;;;;;

; 错误报告是按比特记的,或者将数字加起来得到想要的错误报告等级.
; E_ALL - 所有的错误和警告.
; E_ERROR - 运行时的严重错误.
; E_WARNING - 运行时的警告(并不是非常严重的).
; E_PARSE - 编译时解析错误.
; E_NOTICE - 运行时提醒(这些经常是是你的代码的bug引起的,
; 也可能是有意的行为造成的(如基于未初始化的变量自动初始化为一个
; 空字符串而使用一个未初始化的变量).
; E_CORE_ERROR - 发生于PHP启动时初始化过程中的致命错误.
; E_CORE_WARNING - 发生于PHP启动时初始化过程中的警告(非致命性错).
; E_COMPILE_ERROR - 编译时致命性错误.
; E_COMPILE_WARNING - 编译时警告(非致命性错).
; E_USER_ERROR - 用户产生的出错消息.
; E_USER_WARNING - 用户产生的警告消息.
; E_USER_NOTICE - 用户产生的提醒消息.
;
; 例子:
;
; - error_reporting = E_ALL & ~E_NOTICE 显示所有的错误,除了提醒.
;
; - error_reporting = E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR 仅显示错误.
;
error_reporting = E_ALL & ~E_NOTICE

; 显示错误(作为输出的一部分).在WEB站点上,建议您关掉这个功能,并用错误日志的方式来代替.
; 如果打开此功能可能会给您带来安全问题,例如文件在服务器上的路径和您的数据库或其它信息.
; 不过在Debug过程中,打开此项会给调试程序带来极大的方便.
display_errors = On

; 如果display_startup_errors设置为Off,即使display_errors被设置成On,
; 在PHP启动过程中的错误也不会被显示.如果不是在Debug过程中,建议您关闭此项.
display_startup_errors = On

; 在日志文件中记录错误(服务器日志,stderr标准错误输出, 或者error_log (下面的)).
; 正如上面说明的那样,强烈建议你在最终发布的web站点时以日志方式记录错误.
log_errors = Off

; 设定错误日志文件最大值.默认大小是1024M.
log_errors_max_len = 1024

; 不记录重复的信息.在ignore_repeated_source被设为On前,重复的信息一定发生在同一文
; 件的同一行
ignore_repeated_errors = Off

; 忽略重复多次的信息.如果ignore_repeated_source被设为On,您将不能记录不同文件或不同行
的相同信息.
ignore_repeated_source = Off

; 如果此命令设为Off,内存溢出将不会被显示.
; 而这只在Debug, 并且error reporting中包含E_WARNING时才有意义.
report_memleaks = On

; 是否在$php_errormsg中存储错误/警告信息(布尔).
track_errors = Off

; 是否在错误信息中包含HTML语法错误.
html_errors = On

; 如果您已经让PHP记录HTML错误,并想通过在错误页面上的点击来获得详细信息,
; 您可以从http://www.php.net/docs.php下载一个文档,
; 并且修改docref_root来使用这个文档,这个值必须以\'/\'开头,您也必须指定该文档的扩展名.
;docref_root = /phpmanual/
;docref_ext = .html

; 在错误信息输出前的字符.
;error_prepend_string = \\"\\"

; 在错误信息输出后的字符.
;error_append_string = \\"\\"

; 用于记录错误日志的指定文件.
;error_log = filename

; 用系统日志记录错误(NT,XP,w2k下的事件查看器,WIN95和WIN98下无效).
;error_log = syslog


;;;;;;;;;;;;
; 数据处理 ;
;;;;;;;;;;;;
;
; 说明 - track_vars 在PHP 4.0.3中是一直激活的

; 在PHP中分隔URL的符号,默认是 \\"&\\".
;arg_separator.output = \\"&\\"

; 在变量中插入URL的分隔符号,默认是 \\"&\\".
; 说明: 任何字符在这里都是作为分隔符的!
;arg_separator.input = \\";&\\"

; 这条指示描述了PHP记录GET,POST,Cookie,Environment和Built-in这些变量的顺序.
; 以G,P,C,E和S代表,通常以EGPCS或GPC的方式引用,按从左到右记录,最新的记录覆盖较旧的.
variables_order = \\"EGPCS\\"

; 是否将这些 EGPCS 变量注册为全局变量.
; 若你不想让用户数据不在全局范围内混乱的话,你可以想关闭它.
; 这和 track_vars 连起来用更有意义 — 这样你可以通过$HTTP_*_VARS[] 数组访问所有的GPC变量.
; 建议您尽量不使用全局变量,因为它有可能引起安全问题,所以这个指令是不被推荐的.
register_globals = On

; 是否启用argv和argc变量(这里argv为数组,argc为变量数).
; 如果您不使用这些变量,您可以设为Off来增加PHP的执行效率.
register_argc_argv = Off

; PHP能接收POST数据的最大值.
post_max_size = 4M

; 不推荐您使用此指令,推您使用variables_order来代替.
gpc_order = \\"GPC\\"

;;;;;;;;;;;;
; 魔术引用 ;
;;;;;;;;;;;;

; 是否对引入的GET/POST/Cookie数据启用魔术引用.
magic_quotes_gpc = On

; 是否对运行时产生的数据启用魔术引用,例如用SQL查询得到的数据,用exec()函数得到的数据等.
magic_quotes_runtime = Off

; 是否使用Sybase形式的魔术引用(即用\\\'代替\'\').
magic_quotes_sybase = On

; 在PHP文档前的后自动填加文件.
auto_prepend_file =
auto_append_file =

; 像4.0b4一样,PHP总是默认地在\\"Content-type:\\"头标输出一个字符的编码方式
; 只要设置为空,就会取消这个字符了.PHP的内建默认值是text/html.
default_mimetype = \\"text/html\\"
;default_charset = \\"iso-8859-1\\"

; 是否一直使用$HTTP_RAW_POST_DATA变量.
always_populate_raw_post_data = Off

; 是否允许处理PHP脚本以外的HTTP请求.
; 如果您想获得这些请求的数据, 您必须同时设置always_populate_raw_post_data变量.
;allow_webdav_methods = On

;;;;;;;;;;;;
; 路径设置 ;
;;;;;;;;;;;;

; UNIX服务器使用如下路径: \\"/path1:/path2\\"
;include_path = \\".:/php/includes\\"
;
; Windows服务器使用如下路径: \\"\\path1;\\path2\\"
;include_path = \\".;c:\\php\\includes\\"

; PHP文件的根目录, 仅在非空时有效,如果PHP被设置为安全模式,PHP不会处理此目录以外文件.
doc_root =

; 在使用/~username动工打开脚本时,PHP寻找该脚本的路径,同样地仅在非空时有效.
user_dir =

; 存放可加载的扩展库(模块)目录的路径.
extension_dir = ./

; 是否启用dl()函数.在多线程的服务上(如IIS和Zeus)dl()函数不能很好的工作,
; 在多线程服务上该指令默认被禁止.
enable_dl = On

; 在很多服务器上,以CGI形式运行PHP来提高安全性能.默认设置下,PHP设其为On.
; 您可以在这里关掉它,但关掉以后是有风险的.但在IIS下您则可以毫无风险的关掉它,
; 事实上,在IIS下您必须关掉它.
; cgi.force_redirect = 1

; 如果cgi.force_redirect功能打开,并且您不是在Apache或Netscape(iPlanet)服务器下运行,
您可能须要设定一个环境变量名,PHP将寻找此变量来确定可以继续执行,设定此变量可能会引起
安全问题,避免的方法是先弄清楚您在作什么~~~
; cgi.redirect_status_env = ;

; 此选项提供了在IIS服务器下的智能化安全解决方案,如果在IIS下请设为On,目前不支持Apache
; 服务器(2002年3月17日),默认值是0.
; fastcgi.impersonate = 1;

; 在发送HTTP响应时cgi.rfc2616_headers告诉PHP使用哪种headers.
; 如果设为0,PHP的发送情况是被Apache所支持的,如果设为1,PHP将发送自适应的RFC2616headers.
; 在IIS下,请设其值为1,默认值是0.
;cgi.rfc2616_headers = 0


;;;;;;;;;;;;
; 文件上传 ;
;;;;;;;;;;;;

; 是否允许以HTTP方式上传文件.
file_uploads = On

; 以HTTP方式上传文件的临时目录 (未指定时使用系统默认).
;upload_tmp_dir =

; 允许上传文件的最大值.
upload_max_filesize = 2M


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Fopen wrappers(这个俺不会译5555~) ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; 是否允许把URLs(如http://和ftp://)当作文件处理.
allow_url_fopen = On

; 指定一个匿名FTP访问密码(例如您的邮件地址)
;from=\\"Neter@Neter.CN\\"

; 指定User-Agent字符串(User-Agent是啥呀?用户代理?55555555~)
; user_agent=\\"PHP\\"

; 默认连接超时时间(以秒计).
default_socket_timeout = 60

; 如果您的脚本程序不是在苹果机等操作系统下,而只是运行在unix或者win32系统下,
; 打开这个变量将使PHP自动地检查已终止的那些字符变量以便fgets()函数和file()函数
; 不受限制的表达.
; auto_detect_line_endings = Off


;;;;;;;;;;;;
; 动态扩展 ;
;;;;;;;;;;;;
;
; 如果您想让动态扩展库能够自动的被加载,请使用下面的语法.
;
; extension=modulename.extension
;
; 例如在Windows下:
;
; extension=msql.dll
;
; 在UNIX下:
;
; extension=msql.so
;
; 注意后面的值只是模块的名字,并不包含该模块所在的目录,您应该用上面的extension_dir
; 来指示指定扩展库的路径.

;Windows扩展
;注意:PHP已经内建了对MySQL和ODBC支持,所以不必再为其配置任何dll扩展.
;
;extension=php_bz2.dll
;extension=php_cpdf.dll
;extension=php_crack.dll
;extension=php_curl.dll
;extension=php_db.dll
;extension=php_dba.dll
;extension=php_dbase.dll
;extension=php_dbx.dll
;extension=php_domxml.dll
;extension=php_exif.dll
;extension=php_fbsql.dll
;extension=php_fdf.dll
;extension=php_filepro.dll
;extension=php_gd.dll
;extension=php_gd2.dll
;extension=php_gettext.dll
;extension=php_hyperwave.dll
;extension=php_iconv.dll
;extension=php_ifx.dll
;extension=php_iisfunc.dll
;extension=php_imap.dll
;extension=php_interbase.dll
;extension=php_java.dll
;extension=php_ldap.dll
;extension=php_mbstring.dll
;extension=php_mcrypt.dll
;extension=php_mhash.dll
;extension=php_mime_magic.dll
;extension=php_ming.dll
;extension=php_mssql.dll
;extension=php_msql.dll
;extension=php_oci8.dll
;extension=php_openssl.dll
;extension=php_oracle.dll
;extension=php_pdf.dll
;extension=php_pgsql.dll
;extension=php_printer.dll
;extension=php_shmop.dll
;extension=php_snmp.dll
;extension=php_sockets.dll
;extension=php_sybase_ct.dll
;extension=php_w32api.dll
;extension=php_xmlrpc.dll
;extension=php_xslt.dll
;extension=php_yaz.dll
;extension=php_zip.dll


;;;;;;;;;;;;
; 模块设定 ;
;;;;;;;;;;;;

[系统日志]
; 是否定义各种系统日志变量(如$LOG_PID,$LOG_CRON等).关掉这个指令将会提高效率.
; 您可以在运行时使用define_syslog_variables()函数来定义这些变量.
define_syslog_variables = Off

[邮件功能]
; 仅在Windows下.
SMTP = localhost

; 仅在Windows下.
sendmail_from = Administrator@localhost.com

; 仅在Unix下.您也可以指定参数(默认值是: \\"sendmail -t -i\\").
;sendmail_path =

[Java]
;java.class.path = .\\php_java.jar
;java.home = c:\\jdk
;java.library = c:\\jdk\\jre\\bin\\hotspot\\jvm.dll
;java.library.path = .\\

[SQL]
sql.safe_mode = Off

[ODBC]
;odbc.default_db = Not yet implemented
;odbc.default_user = Not yet implemented
;odbc.default_pw = Not yet implemented

; 是否允许持续连接.
odbc.allow_persistent = On

; 是否在重用前检查连接可用性.
odbc.check_persistent = On

; 允许持续连接的最大值.-1代表无限制.
odbc.max_persistent = -1

; 允许连接的最大值(持续连接和非持续连接的和).-1代表无限制.
odbc.max_links = -1

; 控制LONG类型的字段.返回变量的大小(比特).0代表不控制.
odbc.defaultlrl = 4096

; 控制二进制数据.0不控制,1保持,2转换成字符.
; 可参见有关odbc_binmode和odbc_longreadlen的文档
; 以得到uodbc.defaultlrl和uodbc.defaultbinmode的解释.
odbc.defaultbinmode = 1

[MySQL]
; 是否允许持续连接.
mysql.allow_persistent = On

; 允许持续连接的最大值.-1代表无限制.
mysql.max_persistent = -1

; 允许连接的最大值(持续连接和非持续连接的和).-1代表无限制.
mysql.max_links = -1

; mysql_connect()函数的默认端口.如不设置,mysql_connect()将使用$MYSQL_TCP_PORT或者
; 在/etc/services下的mysql-tcp或者编译定义的MYSQL_PORT(nuix)依次搜索,而在Win32下,将
; 仅检查MYSQL_PORT.
mysql.default_port = 3306

; 用于本地MySql连接的默认socket,为空时,使用内建值.
mysql.default_socket = MySql

; mysql_connect()连接的默认主机(安全模式下无效).
mysql.default_host = localhost

; mysql_connect()连接时的默认用户名(安全模式下无效).
mysql.default_user = root

; mysql_connect()连接时的默认密码(安全模式下无效).
; 注意,在这里使用密码十分危险,因为任何有PHP权限的用户都可以通过运行\'echo get_cfg_var

(\\"mysql.default_password\\")\'
; 的方法来获得该密码,当然,任何有访问权限的用户也可以得到此密码.
mysql.default_password =

; 连接超时的最大值(以秒计).-1代表无限制.
mysql.connect_timeout = -1

; 鉴定报告模式.如果此模式被激活(即设为On),关于table/index和MYSQL错误将会被列出.
mysql.trace_mode = Off

[mSQL]
; 是否允许持续连接.
msql.allow_persistent = On

; 允许持续连接的最大值.-1代表无限制.
msql.max_persistent = -1

; 允许连接最大值(持续连接与非持续连接的和).-1代表无限制.
msql.max_links = -1

[PostgresSQL]
; 是否允许持续连接.
pgsql.allow_persistent = On

; 是否使用pg_pconnect()函数检查中断的持续连接.Need a little overhead(55555俺又不懂了).
pgsql.auto_reset_persistent = Off

; 允许持续连接的最大值. -1代表无限制.
pgsql.max_persistent = -1

; 允许连接的最大值(持续连接与非持续连接的和).-1代表无限制.
pgsql.max_links = -1

; 是否忽略PostgreSQL的返回信息.
pgsql.ignore_notice = 0

; 是否记录PostgreSQL的返回信息.
; 仅当pgsql.ignore_notice=0时,模块才能记录该信息.
pgsql.log_notice = 0

[Sybase]
; 是否允许持续连接.
sybase.allow_persistent = On

; 允许持续连接的最大值.-1代表无限制.
sybase.max_persistent = -1

; 允许连接的最大值(持续连接与非持续连接的和).-1代表无限制.
sybase.max_links = -1

;sybase.interface_file = \\"/usr/sybase/interfaces\\"

; 显示错误的最低严重性.
sybase.min_error_severity = 10

; 显示信息的最低严重性.
sybase.min_message_severity = 10

; 与旧的版本(PHP3.0)兼容.如果设为On,PHP将根据它们的Sybase类型自动地赋值到结果中,
; 而不是把它们全当作字符串处理,此模式在将来不再被支持,所以尽量对代码进行修改,并
; 关掉这项.
sybase.compatability_mode = Off

[Sybase-CT]
; 是否允许持续的连接.
sybct.allow_persistent = On

; 允许持续连接的最大值.-1代表无限制.
sybct.max_persistent = -1

; 允许连接的最大值(持续连接与非持续连接的和).-1代表无限制.
sybct.max_links = -1

; 服务器信息最小显示量.
sybct.min_server_severity = 10

; 客户信息最小显示量.
sybct.min_client_severity = 10

[dbx]
; 通过对dbx.colnames_case的设置,返回的数组名能够转换成兼容的值.
; \\"unchanged\\" (在不设置时的默认值)
; \\"lowercase\\" (小写)
; \\"uppercase\\" (大写)
; 推荐不区分大小写字母,但是由于兼容性的限制我们不得不把大小写区分开.
dbx.colnames_case = \\"unchanged\\"

[bcmath]
; 用于所有bcmath函数的10十进制数小数的个数.
bcmath.scale = 0

[browscap]
;browscap = extra/browscap.ini

[Informix]
; ifx_connect()的默认主机(安全模式下无效).
ifx.default_host =

; ifx_connect()的默认用户(安全模式下无效).
ifx.default_user =

; ifx_connect()的默认密码(安全模式下无效).
ifx.default_password =

; 是否允许持续连接.
ifx.allow_persistent = On

; 允许持续连接的最大值.-1代表无限制.
ifx.max_persistent = -1

; 允许连接的最大值(持续连接与非持续连接的和).-1代表无限制.
ifx.max_links = -1

; 若打开,select状态符将返回一个byte blobs而不是它的ID.
ifx.textasvarchar = 0

; 若打开,select状态符将返回一个text content而不是它的ID.
ifx.byteasvarchar = 0

; 从固定长度的字符列里分离出空格.可能对Informix SE用户有效.
ifx.charasvarchar = 0

; 若打开, text和byte blobs的内容被导出到一个文件,而不是保存在内存中.
ifx.blobinfile = 0

; NULL(空)被作为空字段返回,除非,这里被设为1,这种情况下(为1)NULL作为字串NULL返回.
ifx.nullformat = 0

[Session]
; 用于保存/获取取数据的控制方式.
session.save_handler = files

; session的保存路径.
; 说明1: PHP不会建立这个文件夹,您必须自行建立.
;
; 说明2: 如果您使用子文件夹进行存储,请检查下面的路径.
session.save_path = /tmp

; 是否使用cookies.
session.use_cookies = 1

; 这个选项能够使用户避免由于session名被作为URLs的一部分显示而受到的攻击.
; 默认值是0.
; session.use_only_cookies = 1

; session的名称(同时作为cookie的名称).
session.name = PHPSESSID

; 是否在请求开始时初始化session.
session.auto_start = 0

; cookie的保存时间(以秒计),设为0时,浏览器关闭时不再保存.
session.cookie_lifetime = 0

; cookie的有效路径.
session.cookie_path = /

; cookie的有效域.
session.cookie_domain =

; 控制连续的数据.PHP是PHP数据的标准控制器.
session.serialize_handler = php

; 定义\'garbage collection\'(碎片整理)进程的初始化比率
; 这个比率是通过gc_probability/gc_dividend算出的.
; e.g. 1/100 means 1%.

session.gc_probability = 1
session.gc_dividend = 100

; 在指定的秒数后,存储的数据将会被看作\'碎片\'并且被碎片整理进程清理掉.
; 警告: 您的文件系统会定期的存储数据,FAT系统除外.所以应该使用特别的方法来删除sessions.
session.gc_maxlifetime = 1440

; 说明: 如果您使用文件夹来存储session文件(查看session.save_path中的设置),
; 碎片整理不会自动的运行,您必须通过其它方法整理这些碎片.
; 例如下面的方法和把session.gc_maxlifetime设成1440(1440秒=24分)是等效的.
; cd /path/to/sessions; find -cmin +24 | xargs rm

; 在PHP4.2及更早的版本中没有正式的文件允许您初始一个处于全局的session变量,即使是在
; register_globals被禁用的情况下.PHP4.3及以后版本中,如果此功能被使用,PHP提醒您.
; 您可以对此功能和警告信息单独禁用,此时,如果bug_compat_42是激活的,仅会显示警告信息.

session.bug_compat_42 = 1
session.bug_compat_warn = 1

; 检查HTTP引用使额外包含于URLs中的ids无效.
; HTTP_REFERER应该包含有效的session字段作为子链.
session.referer_check =

; 从文件中读取字节的大小.
session.entropy_length = 0

; 在这里指定session id.
session.entropy_file =

;session.entropy_length = 16

;session.entropy_file = /dev/urandom

; 设定为{nocache,private,public,}来决定HTTP的缓存问题,
; 或者不进行设置来避免发送明显的headers.
session.cache_limiter = nocache

; 文档在指定时间(以分计)后过期.
session.cache_expire = 180

; 默认情况下不支持过渡sid.使用此功能时您会收到警告信息.
; 使用过渡sid是有风险的.因为:
;
; - 用户可以发送包含处于激活状态的session ID的URL给其它人.
;
; - 包含处于激活状态的session ID的URL会存在于容易接近的公共计算机里.
;
; - 用户可以通过使用存储于浏览器历史记录或书签中相同的session ID来访问您的站点.
;
session.use_trans_sid = 0

; 重写URL时将从定义的HTML标签中寻找form/fieldset是特殊的,如果您在这里使用它们,
; 就会附;加一个隐藏的,其信息不同与其它的对URLs的附加.如果您想符合XHTML,
; 删除form记录.注意:所有有效的命令必须包含一个\\"=\\"号,即使命令后面没有具体值.
url_rewriter.tags = \\"a=href,area=href,frame=src,input=src,form=,fieldset=\\"

[MSSQL]
; 是否允许持续连接.
mssql.allow_persistent = On

; 允许持续连接的最大值.-1表示无限制.
mssql.max_persistent = -1

; 允许连接的最大值(持续连接与非持续连接的和).-1表示无限制.
mssql.max_links = -1

; 显示最小错误严重性.
mssql.min_error_severity = 10

; 显示最小信息重要性.
mssql.min_message_severity = 10

; 是否打开与旧的PHP 3.0兼容的模式.
mssql.compatability_mode = Off

; 有效范围0 - 2147483647.默认值是4096.
;mssql.textlimit = 4096

; 有效范围0 - 2147483647.默认值是4096.
;mssql.textsize = 4096

; 限制每一批中的记录数量.设为0时表示所有记录记录在一批中.
;mssql.batchsize = 0

; 当连接到服务器时使用NT验证.
mssql.secure_connection = Off

; 指定最大进程数.默认是25
;mssql.max_procs = 25

[Assertion]
; Assert(expr);默认值是激活的.(俺不行了,这组指令译不过来了55555)
;assert.active = On

; Issue a PHP warning for each failed assertion.
;assert.warning = On

; Don\'t bail out by default.
;assert.bail = Off

; User-function to be called if an assertion fails.
;assert.callback = 0

; Eval the expression with current error_reporting(). Set to true if you want
; error_reporting(0) around the eval().
;assert.quiet_eval = 0

[Ingres II]
; 是否允许持续连接.
ingres.allow_persistent = On

; 允许持续连接在最大值. -1代表无限制.
ingres.max_persistent = -1

; 允许连接的最大值.-1代表无限制.
ingres.max_links = -1

; 默认的database(格式是: [node_id::]dbname[/srv_class]).
ingres.default_database =

; 默认用户.
ingres.default_user =

; 默认密码.
ingres.default_password =

[Verisign Payflow Pro]
; 默认的Payflow Pro服务器.
pfpro.defaulthost = \\"test-payflow.verisign.com\\"

; 服务器的默认端口.
pfpro.defaultport = 443

; 默认的超时时间(以秒计).
pfpro.defaulttimeout = 30

; 默认代理服务器IP地址(如果须要).
;pfpro.proxyaddress =

; 默认代理服务器端口.
;pfpro.proxyport =

; 默认的登陆名.
;pfpro.proxylogon =

; 默认的登陆密码.
;pfpro.proxypassword =

[Sockets]
; 是否使用系统的read()功能来替代php_read().
sockets.use_system_read = On

[com]
; 指向包含GUIDs,IIDs或典型静态库文件的文件名的文件的路径.
;com.typelib_file =
; 是否允许调用分布式的COM文件
;com.allow_dcom = true
; 是否自动把组成典型静态库文件的常量注册到com_load()函数.
;com.autoregister_typelib = true
; 是否区分常量的大小写
;com.autoregister_casesensitive = false
; 是否在有重复的常量出现时显示错误
;com.autoregister_verbose = true

[Printer]
;printer.default_printer = \\"\\"

[mbstring]
; 语言选择.
;mbstring.language = Chinese

; 语言/脚本的编码.
; 某些编码不能作为本地的语言编码,例如SJIS, BIG5, ISO-2022-.
;mbstring.internal_encoding = GB2312

; http输入编码.
;mbstring.http_input = auto

; http输出编码.mb_output_handler必须注册为函数的输出缓存.
;mbstring.http_output = SJIS

; 是否根据mbstring.internal_encoding的设置自动翻译编码. 把这项设为On可以把输入字符
; 转换为设定的编码语言.
; 说明: 一定不要使用这项功能编译静态库文件和某些软件.
;
;mbstring.encoding_translation = Off

; 编码检查顺序.
;mbstring.detect_order = auto

; 当字符不能够被转换时,是否使用substitute_character.
;mbstring.substitute_character = none;

; 是否用加密的字符覆盖没有加密的字符.例如用mb_send_mail(), mb_ereg()覆盖
; mail(), ereg()等.有效的值是0,1,2,4或者它们的组合.例如,7代表覆盖全部.
; 0: 不覆盖
; 1: 覆盖mail()函数
; 2: 覆盖str*()函数
; 4: 覆盖ereg*()函数
;mbstring.func_overload = 0

[FrontBase]
;fbsql.allow_persistent = On
;fbsql.autocommit = On
;fbsql.default_database =
;fbsql.default_database_password =
;fbsql.default_host =
;fbsql.default_password =
;fbsql.default_user = \\"_SYSTEM\\"
;fbsql.generate_warnings = Off
;fbsql.max_connections = 128
;fbsql.max_links = 128
;fbsql.max_persistent = -1
;fbsql.max_results = 128
;fbsql.batchSize = 1000

[Crack]
; 修改下面的设置,使这与cracklib文件夹的本地路径相符合,只可以使用基本的文件名,
; 不包含扩展名.
; crack.default_dictionary = \\"c:\\php\\lib\\cracklib_dict\\"

[exif]
; 这组就不用译了吧
; Exif UNICODE user comments are handled as UCS-2BE/UCS-2LE and JIS as JIS.
; With mbstring support this will automatically be converted into the encoding
; given by corresponding encode setting. When empty mbstring.internal_encoding
; is used. For the decode settings you can distinguish between motorola and
; intel byte order. A decode setting cannot be empty.
;exif.encode_unicode = ISO-8859-15
;exif.decode_unicode_motorola = UCS-2BE
;exif.decode_unicode_intel = UCS-2LE
;exif.encode_jis =
;exif.decode_jis_motorola = JIS
;exif.decode_jis_intel = JIS

; Local Variables:
; tab-width: 4
; End: