### PHP 与 MySQL 建构强力网站(1)

前言
目前全世界使用 Linux 来架设的网站呈现爆炸性的成长，甚至已经影响到 Microsoft 的 Windows NT，之所以让 Linux 急速窜起的原因则是 Linux 的 Open Source 精神与其系统的稳定效能。
Linux 上一般最普遍采用的 Web server 是名震江湖的 Apache，Apache 是由一群玩家们所设计，是所谓的 Open Source Software，也就是表示 Apache 是免费并且自由开放其原始的，它的设定简单并且效能不错，根据 http://www.netcraft.com/ 的统计，截至 1999 年
8 月的结果，Apache 已经占有整个 Web server 市场的 55%，领先 Microsoft 的 22%。对於一个每天数万浏览人次的中型网站来说，Linux 与 Apache 的组合已经足以担其重任。
概要说明
一个网站若是只有 Web server 是没有多大用处的，其後必定有许多大量的资料库待呈 现给浏览者， 因此如何管理成堆的资料则是另一重点，所幸电脑专家们早在数十年前就已经发明了一种资料库来储存、 查询、管理、分类大量资料，它就叫做关连式资料库(Relational DataBase)， 而使用者与关连式资料库之间的沟通桥梁我们称之为 SQL 资料库查询语言(Structured Query Language)， 只要善用 SQL 查询语言，我们便可以轻松且快速地抓取出资料库中我们想要的资料。 本次专栏我们将介绍一个相当适用於重量级应用场合的资料库软体 -- MySQL。MySQL 的执行速度相当的快，并且也放出了符合所谓 GPL 的版本。
有了 Web server 与资料库之後，我们还需要一个两者之间的桥梁，让网页上浏览者的查询命令能够下达资料库， 同时也让资料库的资料内容能够放上网页。在这个方面有许多工具可以作得到，像 Java 就可以， 但是最广为使用的便是 CGI，写过 CGI 的读者都知道设计 CGI 一向是件麻烦事，不但除错不方便， 而且设计起来相当不直接，目前写 CGI 最常见的语言是 C 语言以及 Perl 语言。 最近这两年中拜 Windows NT 与 IIS 之赐， Microsoft 的 ASP (Active Server Page) 大行其道， 成为网页设计的好工具，但是事实上 Unix 的世界已然悄悄地产生了一个功能效率上都不输、 甚至凌驾 ASP 的新工具，它叫做 PHP (Personal Homepage)，PHP 现在已经出现在许多大型网站， 成为网页设计的最佳选择。PHP 能够取代原本 CGI 的功能，执行速度也相当快，并且能够与几乎所有的资料库相连接。
以下我们便由浅入深地介绍如何以 Linux + Apache + PHP + MySQL 来架设一个网站， 并兼谈架站时会遇到的一些问题，在解说的过程中，我会以我所架设的 http://linuxfab.cx/ 作为实例解说，以方便读者了解，以下就分项说明 :
Domain Name 的申请与 DNS(Domain Name Server) 的架设 SQL 查询语言与关连式资料库 PHP 网页设计语言这叁个部份，让各位对如何以 Linux + Apache + PHP + MySQL 来架设网站能够有个最基本而整体性的了解。Domain Name 的申请与 DNS 的架设一个网站当然要有一个名字，也就是所谓的 domain name，这一点我想每个人都应该知道的， 像是 www.chinatimes.com.tw 或是 www.nctu.edu.tw 等就是 domain name。 申请这样在 .tw (台湾) 之下的 domain 可以经由 Hinet、Seednet 或是经由 TWNIC 来申请， 若是申请以 .com、.org、.net 等这种国际性的 domain name 时，则必须在国外申请， 不过由於网际网路与信用卡的发达，现在已经出现很多可以直接在网路上申请 domain name， 并且以信用卡支付的服务，通常在一两天之内便可以办好，在这一点国内的申请就稍嫌烦琐， 比不上国外的快速服务。以 LinuxFab 为例，其 domain name 是 linuxfab.cx，.cx 是太平洋上的一个小岛 □ Christmas island 的网域，当初之所以申请这样的网域最主要是因为它价格便宜， 并且可以在网路上申请以及使用信用卡支付费用，另外也不必接受身分检查的繁复手续。 如果你想申请一个与众不同的 domain name，那麽是可以考虑.cx 的。
申请了 domain name，之後，上游的 DNS 会允许你自己的 DNS 向其传送 domain name 资料，以 LinuxFab 为例，上游的 DNS 为 nic.cx，而 xxx.linuxfab.cx 的 domain name 便可以透过你所架设的 DNS 来设定， 并且将其传送给 nic.cx，让你所设定的 domain name 能够为别人所查询到。Domain Name 的申请与 DNS 的架设 DNS 的运作机制相当地有趣，我们以 abc.def.ghi 为例，往 abc 的方向称之为下游， 往 ghi 的方向称之为上游，所以 abc.def.ghi 为 .def.ghi 的下游， 而 def.ghi 又为 .ghi 的下游，所以 .ghi 为 def.ghi 的上游，而 .def.ghi 又为 abc.def.ghi 的上游， 假设某个人所使用的 domain name 为 jkl.mno.ghi，他想要查询 abc.def.ghi 的 ip 时， 系统会询问其本身的上游，也就是 .mno.ghi 的 DNS，若找不到资料，则再向其上游询问， 也就是 .ghi ，此时 .ghi 的 DNS 发现了 def.ghi 的资料，於是往其下游询问， 也就是 def.ghi 的 DNS，若没有找
到资料，则再询问其下游，也就是 abc.def.ghi， 不过此例中，def.ghi 的 DNS 已经找到了所属的 abc.def.ghi 的资料，於是开始沿着原路径一路传回。

在任何一台 DNS 查询到了 domain name 以及其对应的 ip 之後，会存入该 DNS 的 cache(快取) 中，这样下一次若是再遇到查询该 domain name 时， 便可直接从 cache 中读取，而不必重复同样的漫长查询动作了。omain Name 的申请与 DNS 的架设接下来该来介绍一下 DNS 的设定，前面说过要管理自己网域以下的 domain name (以 LinuxFab 来说便是 xxx.linuxfab.cx)，必须自己设定 DNS(Domain Name Server)，Linux 上的 DNS 软体是一个名为 named 的程式以及包含 named.boot、named.hosts 以及 named.ca 这几个设定档，只要先设定好设定档之後， 再启动(执行) named 程式即可。
named.boot 是用来设定 DNS 所管辖的各个 domain name 所需的资料库档案， 一个 DNS 可以管辖不同的网域，比如说我可以花钱买个 abc.cx 以及 def.cx 这两个网域，然後让上游的 DNS 指向同一个 DNS，不过一般来说，一个 DNS 通常都管理一个网域。以 linuxfab.cx 为例，named.boot 的内容为 :
directory /etc
primary linuxfab.cx named.hosts
primary 0.0.127.in-addr.arpa named.local
cache . named.ca
其中，第一行是表示资料库设定档所存放的目录，第二行是指 .linuxfab.cx 网域下的 domain name 所存放的档案，第叁行我们暂时不管它，第四行是指 DNS 的 cache 资料存放的档案。omain Name 的申请与 DNS 的架设接下来重头戏就是 named.hosts 的设定，以 linuxfab 为例，其内容如下 :
$ORIGIN linuxfab.cx.
@ IN SOA dns.linuxfab.cx. root.dns.linuxfab.cx. (
950710 ; Serial
21600 ; Refresh
7200 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS dns.linuxfab.cx.
localhost IN A 127.0.0.1
dns IN A 140.113.88.2
IN HINFO "X86 PC" "LINUX"
www IN A 140.113.88.7
IN HINFO "X86 PC" "MITUX SVR4MP"