perl教程017

perl教程017 - 下载...

Info iconThis preview shows page 1. Sign up to view the full content.

View Full Document Right Arrow Icon
This is the end of the preview. Sign up to access the rest of the document.

Unformatted text preview: 下载 第三部分 将Perl 用于 CGI 第 17学时 第 18 学时 第 19学时 第 20学时 第 21学时 第 22学时 第 23学时 第 24 学时 CGI 概述 基本窗体 复杂窗体 对 HTTP 和CGI 进行操作 cookie 使用 CGI 程序发送电子邮件 服务器推送和访问次数计数器 建立交互式 Web 站点 196 使用第三部分 将Perl 用于 CGI 下载 种交互操作的情况。 图 17-1 We b 浏览器检索一 Web 服务器 Web 浏览器 个 Web 页 Web 页 17.1.1 检索一个静态Web页 当客户机需要检索一个 We b 页时,它要查看统一资源定位器( U R L) ,以确定使用什么协 议、服务器,以及在该服务器上提出的是什么请求。典型的 URL类似下面的形式: URL可以分割成下列部分: • http 这个部分是指使用的协议。 HTTP即超文本传输协议,它是传送 Web页时使用的协 议。你也会看到文件传输协议( ftp)或保密 HTTP(https)等协议。 • www.google.com 这部分是服务器名,也称为主机名,它包含你想要的文档。有时,这 部分不是主机名,而是个 IP 地址,通常写作 4 个数字,数字之间用圆点隔开,比如 209.185.108.147。不过这些地址不如主机名那样可靠。 • : 80 这部分是个端口号,用于确定你的客户机与服务器是在哪个端口上互相进行连接。 这部分通常是可有可无的。使用的协议决定了使用什么端口。 http协议通常使用端口 80。 • more.html 这部分是指对服务器提出的请求。通常这是你想检索的一个文档。有时它写 作一个路径名,例如 / a r c h i v e s / f o o . h t m l,也可以用其他字符作为结尾(? &) ,不过它基 本上指客户机要求向服务器检索的文档。 这时客户机为 http执行下列操作部骤(见图 17-2) : 1) 主机名( www.google.com)转换成 IP地址。 2) 使用 IP地址和端口号与 www.google.com上的服务器建立连接。 3) 向服务器提出检索 Web页more.html的请求。客户机等待服务器应答。 4) 服务器发出应答,在上例中,服务器发出 more.html的内容,然后断开与服务器的连接。 5) 客户机在屏幕上显示服务器应答的 Web内容。 图 17-2 客 户机向服务器提 Web 服务器 出检索 We b 页的请 求 Web 浏览器 Web 页 197 第17学时 CGI 概述使用 下载 客户机与服务器之间进行“通信”的详细情况将在第 20学时中介绍。 17.1.2 动态Web页—使用CGI 在检索通常的 We b 页时,服务器只是根据你想要的文档并从它的磁盘存储器上检索这个 文档,然后将它发送给客户机,如图 17-3所示。 图 17-3 检索静态 We b 的示 Web 服务器 Web 浏览器 意图 Web 页 图 1 7 - 3 中的服务器根本不对数据进行任何处理,它只是查看客户机提出的请求,并将请 求的数据传送给客户机。 在We b 上创建动态内容的方法之一是使用 C G I 程序。 C G I是 We b 服务器用来在服务器上运 行程序以便生成 We b 内容的公认的方法。当 U R L 指明 C G I 应该在它上面运行 C G I 程序来生成 Web内容的服务器时,该服务器就启动该程序运行,该程序则生成 Web内容,然后服务器将内 容传递给客户机,如图 17-4所示。 Web 服务器 图 17-4 C G I 脚 本 生成的 Web 浏览器 Web 页 CGI 程序 每当客户机请求检索一个实际上是 CGI程序的 Web页时,便出现下列操作: 1) 服务器启动 CGI程序的一个新实例。 2) CGI 程序使用它需要的信息生成一个 Web页,或者生成另一个应答。 3) 该Web页被送回给客户机。 4) CGI 程序退出。 C G I程序可以是任何类型的程序。它可以是个 P e r l 脚本,就是你将要在这里学习的一项内 容。它也可以是用 C、 UNIX shell ,pascal,LISP、TCL或任何其他编程语言编写的程序。而 许多 C G I 程序是用 P e r l 编写的,这完全是一种巧合。 P e r l恰好非常适合编写用于文本理的程 序,而 CGI 程序的输出常常是文本。 C G I程序的输出几乎可以是任何形式的信息。它可以是图形、 H T M格式的文本、压缩文 件、流式视频信息,或者你在 Web 上找到的任何其他类型的内容。总的来说,你编写的 CGI程 序将生成 HTML 格式的文本。 C G I不是一种语言,它与 P e r l 之间并不存在特殊的关系,与 H T M L语言也 没有任何关系,与 H T T P之间也没有多少关系,它只是 We b服务器与代表服务 器运行的程序之间的一个公认接口。 C G I 的技术规范由美国国家超级计算机 应用中心维护, 该中心的网址是 http://www.ncsa.uiuc.edu/cgi/ interface.html 。 你可以在后面 7 个学时中了解 C G I 的详细特性。 198 使用第三部分 将Perl 用于 CGI 下载 17.2 不要跳过这一节内容 当你准备编写 C G I 程序时,首先必须搞清几个问题,否则,第一次编写 C G I程序的经历一 定不会使你感到愉快。你预先查找这些信息是比较容易的,而在调试程序时要搞清这些问题 则要困难得多。 若要使用 C G I ,必须拥有 We b 服务器。 C G I 编程新手遇到的常见问题是他们试图在 We b服 务器没有正确安装的情况下就编写 CGI程序。若要获取 Web服务器,可以从两种方法中选择一 个。可以在商用 We b服务器上租用一定的空间,也可以运行自己的服务器。决定权在你的手 里,可以根据你愿意支付的费用,需要的带宽,以及你的技术熟练程度来作出决定。 若要获得商用 We b服务器,你可以搜索 We b并查找一个。这些商用服务器常常称为“ We b 托管”公司,它们收取的费用和提供的特性可以根据情况而千差万别。如果你打算编写 Perl C G I 程序,应该确保 Perl 5 将作为 C G I的编程语言。很少有 We b托管公司不支持 Perl 5 作为 C G I 编程语言或者根本不允许 C G I编程的。应该避免使用不支持 Perl 5 的公司提供的服务,有许多 其他公司可以供你选择。 还应该确保 Web托管公司允许你使用自己的脚本。有些公司声称它们允许使用 Perl CGI 程 序,但是接着又要求你使用它们公司的程序,有时要收取一定的费用。你也应该避免使用这 些公司提供的服务。 另外还有一些公司,它们收取一定的费用来“审查”你的 CGI程序,它之所以要收取费用, 原因是你可以使用这些程序。如果你选择这些公司中的一个,应该安装你自己的服务器,以 便进行相应的测试,因为“审查”是非常昂贵的。 如果你具备某些专门技能并愿意阅读全部说明的话,运行你自己的个人 We b 服务器并不 十分困难。首先,必须选择一个 Web 服务器。如果你运行 Windows,可以从几十种免费的或者 接近免费的 Web服务器中选择你要安装的服务器。一定要确保它们支持 Perl 作为 CGI脚本语言。 少数商用 Web 服务器也可以用于 Windows,比如 Microsoft 的Internet Information Server(IIS)。 如果你拥有一台 U N I X 计算机,也可以使用少量商用 We b 服务器。请与 U N I X 供应商联系 索取 Web服务器清单。 I n t e r n e t上最流行的 We b 服务器是 A p a c h e ,它是完全免费的。如果你拥有一个 C 编译器, 那么 Apache We b服务器是很容易安装的。如果你习惯于编辑配置文件,那么它的运行也是非 常容易的。 A p a c h e 甚至可以用于 Miorosoft W i n d o w s 平台。关于 A p a c h e 的信息,请访问 http://www.apache.org。 如果你运行自己的 Web服务器,在试图编写 CGI程序之前,应该确保 Web 服务器运行正确, 并且能够为静态 We b页提供服务。如果你的 We b服务器不能为静态 We b页提供服务,这说明你 的CGI程序很可能无法运行。 还应该检查 Web服务器的配置,以确保你已将 CGI脚本正确地激活。如果不激活这个特性, 那么 CGI编程的初学者就会遇到非常头痛的麻烦。 检验表 无论你是运行自己的 Web服务器,还是租用商用 Web服务器上的空间,都必须花费一点时 间来完成下面这个检验表中的操作,确实如此。请将这些信息写下来,以后你就可以省去很 多麻烦。 199 第17学时 CGI 概述使用 下载 • 如果你是从商用 We b 服务器主机上租用空间,那么该主机将为你提供所有的信息。这些 信息可能位于主机的 We b站点上的 FA Q 中,也可能包含在你建立帐户时发送给你的文档 中。如果你没有接收到这些信息,可以与 We b 托管公司联系索取这些信息。如果你想使 CGI程序正确运行,获取这些信息是非常重要的。 • 如果你已经配置和安装了自己的 Web 服务器,那么这些信息应该是配置进程的组成部分。 如果你遇到了问题,请查看一下是否能够找到一个回答这些问题的 FA Q ,或者是否能够 找到要检验的配置文件。 如果你要进行 CGI编程,必须知道下列信息: • Web服务器上 Perl的位置 你必须知道 Perl 解释程序安装在 Web服务器上的什么位置。由 于你必须修改程序中的#!行代码以便反映该路径的情况,所以必须知道这个信息。如 果你的 Web 托管公司运行 Microsoft公司的操作系统,那么你可以不需要这个信息。 • We b 服务器日志文件的位置 如果不知道 We b 服务器的错误日志保存在什么地方,就很 难调试你的 CGI脚本程序。你应该设法找到这个位置,这很重要。 • 用于 C G I程序的扩展名 We b 服务器有时要将服务器上保存的普通静态 We b 页与根据文 件名来运行的 CGI程序区分开来。 CGI程序的扩展名通常是 .cgi或.pl 。有时则根本不用扩 展名。 • CGI程序目录的位置 Web服务器有时需要 CGI程序文件名的扩展名,有时则需要将文件 放在一个专门的目录中。 (很少同时需要这两者。 )该目录通常称为/ c g i - b i n,并且位于 Web 站点的顶层目录中(或者靠近顶层的目录中) 。 • C G I目录的 URL 许多情况下,你使用的 We b 服务器的 U R L 中 C G I目录附加在它的结尾 处,例如: h t t p : / / w w w . m y s e r v e r . c o m / c g i - b i n h t t p : / / w w w . m y s e r v e r . c o m / c g i /. 或者 / 17.3 编写你的第一个CGI程序w 了解了上述关于 CGI编程的有关说明、注意事项、检验表等信息后,你就可以准备键入你 的第一个 CGI 程序了。程序清单 17-1显示了这个程序。 键入这个程序并将它保存为 hello。如果在检验表中必须将某个扩展名用于 CGI程序(正如 “用于 C G I 程序的扩展名”项中所说的那样) ,那么请使用该扩展名。这样,如果必须使你的 C G I 程序的文件名带有 . c g i 扩展名,那么将该脚本程序保存为 h e l l o . c g i 。如果必须使用扩展 名.pl,请将该脚本程序保存为 hello.pl。 程序清单 17-1 你的第一个 CGI程序 第1 行:这一行是个标准#!行。你必须替换检验表中的“ We b服务器上的 P e r l 位置”信 息项中的路径,使该脚本程序能够运行。当然 -w用于激活警告特性。 第2行: CGI模块纳入了该程序。 qw(: standard)使得一组标准函数从 CGI输入到你的程 200 使用第三部分 将Perl 用于 CGI 下载 序中。 第3行: use strict 是个很好的编程命令,对于 CGI程序来说也是一样。 第 5行:从 C G I 模块中输入 h e a d e r函数。它输出一个标准标题,服务器(和客户机)必须 看到它后才能处理 CGI程序的输出。 第 6 行:当标题输出后,所有输出就会正常显示在浏览器中。在本例中,当 C G I 运行时, 浏览器将显示 Hello world 。 这就是各个代码行的具体内容。 不过,事情并没有结束,你还必须安装这个 CGI程序并对它进行测试,你的工作只成了 一半。 17.3.1 在服务器上安装CGI程序 究竟如何安装 CGI程序,主要取决于你拥有何种服务器,你是否能够在本地访问它,或者 是否只能用 FTP将文件发送给该服务器。下列各节将介绍如何为不同的环境安装 CGI程序。 1. 本地访问 UNIX Web服务器上的文件系统 如果你能够使用 t e l n e t 、r l o g i n或其他方法登录到 UNIX We b 服务器上去,请使用下列说明 来安装 CGI程序: 1) 使用 FTP,将 CGI程序 hello.cgi(或 hello.pl )放在 UNIX服务器上。也可以使用 vi 将该程 序写入服务器,这也是个好方法。 2) 使用 m v 或 c p 命令,将 C G I 程序转到正确的目录中。你应该在“ C G I 程序目录的位置” 下的检验表中找到正确的目录。 3) 在UNIX下,必须使该程序成为可执行程序。可以使用下面这个命令来执行这项操作: 如果该程序的名字是 h e l l o . p l ,则在该命令中使用该名字。该命令使得文件所有者能够写 入该文件,而其他人则可读取和执行该文件(对于 CGI程序来说,这是正确的) 。 2. 只能用 FTP来访问 UNIX Web服务器 如果你只能使用 FTP来访问服务器,请按下列说明来安装 CGI程序: 1) 使用你的 F T P客户程序将 h e l l o . c g i (或 h e l l o . p l)程序转入 C G I 程序目录。你应该已经在 “ C G I程序目录的位置”下的检验表中找到正确的目录。务必以文本方式或 A S C I I 方式来传送 文件,不要使用二进制方式将 C G I程序传送到服务器中。如果使用文本方式的 F T P 实用程序, 那么它的默认方式通常是文本方式。 2) 必须使 CGI程序成为可执行程序。对于仅为文本的 CGI程序,下面这个命令应能运行: 如果 h e l l o . p l是该程序的名字,则上述命令应该使用 h e l l o . p l 。该命令使得该文件可供文件 所有者写入,而其他所有人则可以读取和执行该文件(对于 CGI程序来说,这是正确的) 。 3) 如果你拥有一个图形 F T P程序(如 C u t e - F T P ) ,必须找到 Set Permissions (设置访问许 可权) Change Mode (改变方式) Set File Attributes (设置文件属性) , , ,或 Set File Access Mode(设置文件访问方式 )等选项卡,以便设置访问许可权。 不管用何种方法设置访问许可权,文件所有者需要读/写/执行权限,用户组需要读/ 执行权限,其他用户需要读/执行权限。如果该程序需要数字式访问权限,请使用 755。 下载 201 第17学时 CGI 概述使用 3. 本地访问 NT Web服务器上的文件系统 如果你能够本地访问 NT We b服务器的文件系统,请使用 N T的E x p l o r e r 或文件拷贝实用程 序将 CGI程序放入正确的目录,即“ CGI程序目录的位置”中指定的这个目录。 4. 只能使用 FTP来访问 NT Web 服务器 如果你只能使用 FTP来访问 NT Web 服务器,请使用 FTP客户程序将 hello.cgi(或 hello.pl ) 程序放入 C G I 程序目录。你应该已经找到“ C G I程序目录的位置”下的检验表中的正确目录。 务必用文本方式或 A S C I I 方式来传送文件,不要使用二进制方式将 C G I程序传送到服务器。如 果使用文本方式的 FTP实用程序,其默认方式通常是文本方式。 17.3.2 运行你的CGI程序 若要了解你的 CGI程序是否能够运行,请打开浏览器,并将它指向你在检验表中设定的地 址,即 CGI目录的 URL,并将 CGI程序名附加在该 URL的后面。例如,可以输入下面的 URL: 当保存 CGI程序时,应该使用 hello.cgi或你用于 CGI程序的任何名字。 这时会发生下列两种情况中的一种: 1) 你的浏览器加载一个带有 Hello,world消息的 Web页。 2) 它没有加载这个 Web页。 如果你的 CGI程序不能运行,不管原因是什么,请查看下一节的说明。下一节专门介绍如 何查找类似这样的程序问题。 CGI序的安装和调试过程非常困难,而且的确很难。不过你不 要灰心,因为 C G I程序的运行不会是一帆风顺的,你应该坚定信心。一旦排除了 C G I 程序的故 障,你将不必重新对它进行调试。 如果你的 C G I 程序能够按照要求来运行,那就太好了。这说明你已经成功地安装了你的 Web服务器和 CGI程序,并且使它们能够正确运行。不过你仍然应该浏览下一节的内容。总有 一天,你的某个 CGI 程序可能发生故障,你至少应该熟悉诊断程序故障的操作步骤。 17.4 CGI程序无法运行时怎么办 下面几节为你提供一个 CGI程序的通用调试指南。在你阅读所有这些内容以便找出你的第 一个 CGI程序中的问题之前,请回头看一看前面的内容,以确保没有跳过任何步骤。当你学到 本学时结尾的时候,应能发现你的 CGI程序中存在的任何问题。 这几节中介绍的诊断操作均假设你要调试的 C G I程序名是 h e l l o . c g i。如果你的程序使用别 的名字,请改过来。 17.4.1 这是你的CGI程序吗 • 第一个需要解决的产生问题的原因是 C G I 程序本身。如果 C G I程序不能运行,那么调试 Web服务器的配置是毫无意义的。 C G I程序可以像所有 P e r l程序那样以交互方式来运行,用交互方式来运行 C G I 程序对于程 序的调试来说是非常有用的。若要运行你的 C G I程序,请在命令提示符处输入下面这个命令, 将它启动: 202 使用第三部分 将Perl 用于 CGI 下载 这时 Perl解释程序应该输出下面这行信息作为应答: 这个提示行表示 CGI模块试图获取你的 CGI窗体的值。这些值将在第 18学时中介绍。 看到这个提示后,你应该输入文件结束字符作为应答。在 U N I X 下,它是 C t r l+ D ,你只 需按下 Ctrl键并键入 D。在 Windows中,可以按下 Ctrl+Z。然后 Perl 应该输出下面这两行消息: C o n t e n t - Ty p e :t e x t / h t m l这条消息表示后面的信息应该转换为文本或 H T M L 。这条消息的 含义将在第 2 0 学时中全面介绍。现在,你只需要知道重要的是这条消息是你的程序用 h e a d e r 函数输出的“第一个”信息,并且这条消息是必须输出的。如果在 Content-Type消息之前输出 了别的什么消息,那么 CGI程序的运行将会失败。 问题: Perl应答的语句有误。 解决办法: 找出语句错误。 问题: Perl应答的信息是 Can’t locate CGI.pm in @INC...( 在@INC中无法找到 CGI.pm...)。 解决办法: 你安装的 P e r l不完整。 P e r l 配有默认的 C G I模块。如果你想要安装它,请参阅 本书的附录。 17.4.2 服务器存在的问题 当排除了你的脚本程序是问题的根源之后,就应该检查脚本程序的安装和服务器的配置 是否正确。 问题: 服务器应答的消息是 Not Found (未找到)或 404 Nat Found(404 未找到 )。 解决办法: 这些消息通常表示存在下列问题之一: • 你使用的 U R L 不正确。当你应该键入 h t t p : / / w w w. s e r v e r. c o m/ c g i - b i n / h e l l o . c g i 时,你却 键入 h t t p : / / w w w. s e r v e r. c o m / c g i / h e l l o . c g i。请返回到检验表,核实你的 C G I目录的 U R L 是 否正确。 • 你将脚本程序放入 We b 服务器上的目录不正确。请核实检验表,确定 C G I程序的目录是 否正确。如果不正确,请将脚本程序转到正确目录中。 问题: 你的脚本程序的文本显示出来了。 解决办法: 之所以显示该程序,原因是 Web服务器认为该程序实际上是个文档。 • 你使用的 C G I程序扩展名错了。你没有使用 . p l ,而是使用了 . c g i 或者其他错误的扩展名。 请查看检验表,确保你使用了正确的 CGI程序扩展名。 • 你将脚本程序放入了不正确的目录中了,同时使用了错误的 URL来访问它。请将脚本程 序放入正确的 CGI 程序目录中,并且确保你使用的 URL是正确的。 • 服务器配置有误。如果你是使用自己的 We b 服务器,请重新阅读它的文档,并核实你的 We b服务器安装是否正确。有时安装服务器时包括了一个测试用的 C G I 脚本程序。如果 是这样,请测试这个 C G I 脚本程序。如果你使用一个商用 We b 托管服务器,请核实你将 脚本程序放入了正确的目录之中,否则与 Web主机联系,请求其帮助。 问题: 服务器应答的信息是 Forbidden(禁止)或 403 Error(403 错误 )。 下载 203 第17学时 CGI 概述使用 解决办法: 对 C G I程序的访问权限设置不正确。这个问题最有可能出现在 UNIX We b服务 器上。 可以查看对 h e l l o . c g i程序的访问权限,方法是在命令提示符处键入 ls -1 hello.cgi 。如果你 拥有对服务器的 F T P访问权,可以查看文件访问权,方法是键入 d i r 。该访问权限应该类似下 面的形式: 访问权限是左边的字符 r w x r- x r- x 。如果不是这样,请回到安装说明,详细了解如何正确 地设置对 CGI程序的访问权限。 17.4.3 排除服务器内部错误或500错误 如果服务器应答的消息是 Internal Server Error(服务器内部错误)或 500 Error(500错误) , 这意味着你的 CGI程序运行失败了。这个通用故障消息是由许多不同问题产生的。 检查“ Internal Server Error ”时使用的最重要工具是服务器的日志文件。当 Web服务器收 到客户机要检索 We b 页的请求时,它就会将每个请求写入一个文件,供以后分析时使用。服 务器遇到的任何错误也会记录在这个文件中,包括 CGI 程序生成的出错消息。 请查找服务器的出错日志文件的位置,你在检验表中应该看到了这个文件位置。日志文 件的编写通常是将新的项目附加在日志文件的底部。若要查看 U N I X下的最后几个日志文件项 目,请在提示符后面键入下面这个命令以便查看日志文件的底部的项目: tail server_log 有些 We b服务器配有一个实用程序,它常常是 C G I 程序本身,用于查看日志文件。如果你 只拥有对服务器的 F T P 访问权,那么必须下载该日志文件,并在你的本地 P C 上查看该日志文 件,以便找出错误项。 如果你无权访问服务器的错误日志文件,那么就存在一个很大的隐患。查找“ Internal Server Error ”将是一件漫无边际的工作。按照下面显示的检验表,最终你应该能够找到存在 的问题。 (你在服务器的日志文件中找到的消息是不精确的信息,不同的服务器的消息文本各 不相同。 日志项:No such file or directory :exec of /cgi-bin/hello.cgi failed(没有这个文件或目录: /cgi-bin/hello.cgi 运行失败) 出错的原因: • 脚本程序的#!行可能不正确。应该确保#!行中 P e r l的位置与检验表中 We b 服务器上 的P e r l位置相一致。通过使用 F T P中或本地的 l s 或d i r命令,核实 P e r l 实际上已经安装在该 位置上了。 • 如果你使用 FTP将CGI程序传送到服务器,可能没有使用 ASCII方式进行传输。用二进制 方式将 Wi n d o w s 中编写的脚本程序转移到 U N I X 服务器(并反方向传送) ,这是行不通 的。 • 对 C G I程序的访问权设置不正确( U N I X下) 。请在“服务器存在的问题”这一节中查看 关于 Forbidden的说明。 日志项: Can’t locate CGI.pm in @INC...(@inc中找不到 CGI.pm)。 出错的原因: 204 使用第三部分 将Perl 用于 CGI 下载 • 安装的 P e r l不完整,受到了破坏,或者太旧了。显然 P e r l 无法找到 C G I模块, C G I 模块是 P e r l 的标准组成部分。你必须重新安装该模块,或者与系统管理员联系,请他重新安装 Perl。安装方法请参见本书附录。 日志项: Syntax error,warning,Global symbol requires ,etc(语句错误、警告、需要全局 符号等 )。 出错的原因: • 你的 P e r l 程序显然存在键入错误或语句不正确的问题。请按“这是你的 C G I程序吗”这 一节中的说明,确定问题的性质。 日志项: Premature end of script headers (脚本程序标题过早结束) 出错的原因:这个出错消息说明了这样一种情况,即你的脚本程序在运行,而 CGI模块的 h e a d e r函数输出的 C o n t e n t - Ty p e标题并不是脚本程序发出的第一个消息。有时在日志文件中的 这个消息前面或后面还会出现一条辅助消息。这个辅助消息更有助于确定出错的原因。你可 以试用下面的方法来确定出错的原因: • 在调用 h e a d e r 函数前,务必不要输出任何信息,包括出错消息。在 h e a d e r函数之前输出 的任何东西都会导致这个错误。 在程序的开始处而不是在调用 header函数时,你会看到 Perl CGI 程序输出 “Content-Type :t e x t / h t m l \ n \ n”这条消息。显然输出这个消息和调用 h e a d e r 函 数被认为是做同样的事情,但实际并非如此。 h e a d e r函数要考虑这样一个问 题,即 \ n \ n 在每个服务器上并不总是表示相同的意思,它会为该服务器输出 相应的序列。 • 一个称为输出缓冲的问题会导致 s y s t e m 函数在 h e a d e r 函数输出之前产生输出,并在输出 中出现反引号 ( ` ` )。若要确保 h e a d e r函数的输出总是显示在前面,可以将 Perl CGI 程序的 开始部分重新编写为下面的形式: 17.5 课时小结 在本学时中,我们介绍了 C G I程序如何运行的基本知识,讲述了静态 We b页与动态 We b内 容之间差别,并且在后面几个学时中还要进一步阐明这些问题。你还编写了第一个 CGI程序并 且使它运行了起来。 此外我们还提供了如何调试 CGI程序的指南,这对今后几个学时的学习来说是非常有用的。 17.6 课外作业 17.6.1 专家答疑 问题: 我没有加载 CGI模块,是否必须使用该模块? 下载 205 第17学时 CGI 概述使用 解答: 坦率地说,你确实必须使用该模块。 CGI并不是个很容易使之正常工作的模块。目 前已经发布的许多程序试图仿制 CGI模块的功能,可惜都不太成功。它们存在着大量的安全漏 洞,并且无法实现兼容。此外,它们不符合 I n t e r n e t 标准。在第 1 6 学时中,我们讲述了为何 “仿制车轮”是件并不高明的事情。 C G I 是个很难仿制的车轮,我们都无法第一次或者第 1 0 0 次使之恢复正常。 标准产品中包含的 Perl CGI 模块已经被成千上万个程序开发人员测试过,非常耐用,你可 以放心地使用它。 本书附录中讲到,如果必要的话,你可以安装只供你自己使用的 CGI模块。你没有理由不 使用这个模块。本书中的所有代码例子都需要使用 CGI模块,有关说明的前提是你已经安装了 该模块。 问题: 我拥有 cgi-lib.pl的拷贝,可以使用它吗? 解答: 你不应使用它。 c g i - l i b . p l的所有函数都在 C G I模块中。 c g i - l i b . p l 库非常老,并且得 不到维护。 问题: 为什么人人都必须将 Perl用于 CGI?为什么不使用 C 或TCL? 解答: Perl的特性对 CGI特别有用。这些特性主要包括: • Perl具有非常出色的文本处理功能。 • 你很快就会了解的 Perl的出色功能将使它成为编写 CGI程序的安全语言。 • P e r l 是一种优秀的“胶水”语言,它非常适合将操作系统的实用程序、数据库和 C G I 等 不同技术组合在一起。 • Perl很容易使用。 问 题 : 如果我遇到了关于 P e r l 和 C G I 方面的问题,是否应该将一条消息发送给 comp.lang.perl.misc 新闻组? 解答: 也许不合适。更合适的新闻组是 comp.infosystems.www.authoring.cgi 。不过首先你 应该查看 http://www.w3.org/CGI/网址上的 FAQ。 17.6.2 思考题 1) CGI 程序可以用下面的语言编写: a. 只能用 Perl、UNIX Shell 或C语言。 b. 只能用 C语言。 c. 能够在服务器上运行的所有编程语言。 2) Web是在 Perl 之前问世的。 a. 是。 b. 否。 17.6.3 解答 1) 答案是 c。Perl 并不是编写 CGI程序时使用的惟一语言,它的某些特性在编写 CGI程序时 更加容易并且更加可靠。 2)答案是 b。Perl是在 1987年开发而成的,而 Web直到 1991年才在 CERN问世。 206 使用第三部分 将Perl 用于 CGI 下载 17.6.4 实习 对“ H e l l o, w o r l d!”程序稍作修改,增加一些功能。使用 l o c a l t i m e 输出当前时间,并且 用 H T M L 标记给它增添某些颜色和一两个表格,要有创意。请记住,在你的 P e r l 程序中输出 HTML ,可以在加载 Web页时使该程序出现在最终的 Web 页中。 ...
View Full Document

Ask a homework question - tutors are online