当前位置:编程学习 > CGI >>

中文版 Perl CGI 程式写作常问问题集(一)

答案:版本: 1.0

原文作者:
Shishir Gundavaram <shishir@ora.com>
Tom Christiansen <tchrist@perl.com>

中译、补充:
萧百龄 <hsiao@uconnvm.uconn.edu>

版权事宜:(复制、转载者务必遵守)

This document, and all its parts, are Copyright (c) 1996,
Shishir Gundavaram and Tom Christiansen. All rights
reservered. Permisson to distribute this collection, in part
or full, via electronic means (emailed, posted or archived)
or printed copy are granted providing that no charges are
involved, reasonable attempt is made to use the most current
version, and all credits and copyright notices are retained.
Requests for other distribution rights, including
incorporation in commercial products, such as books,
magazine articles, or CD-ROMs should be made to either of
the authors.

本文件著作权属於 Shishir Gundavaram 及 Tom Christiansen 所
有,Copyright (C) 1996。在不涉及收费营利、尽可能地使用最新
版,及所有著作权告示保持完整的情况下,作者允许任何人透过电
子形式(电子邮件、讨论群布告,或存放),或印表方式对本文件
作完整或部份发行。如欲将本文件作其他方式发行,包括将本文件
附加於商业产品,诸如书籍、杂志文章,或光碟等之中,必须事先对
二位作者其中一人提出请求,以徵得许可授权。

本中译版及译者补充部份著作权属萧百龄及两只老虎工作室所有,
Copyright (C) 1997。本中译版遵守并使用与上述原文版相同的使用
条款发行。

---------------------------------------------------------------------------

文体说明:

1.
译者已就原文中语焉不详、资讯过时,或可作额外补充之处附加注解。这些注解
均以星号 (*) 於适当处(通常为句尾)标示。实际的说明文字则大多紧邻星号
所在的段落,自成一段。所有注解文字均以「【译者】」起头。
2. 范例中的 Perl 程式码已由译者适度加以翻译、去除多馀的括弧,并依
perlstyle manpages 中所建议的写作格式及习惯稍作修整。

---------------------------------------------------------------------------

目录:

1.0 -入门简介

Q1.1: 为什麽我的 HTML page/form 需要用 script?
Q1.2: CGI 各代表什麽?
Q1.3: 到底什麽叫 script?我能拿它来能做什麽?
Q1.4: 什麽是 Perl?为什麽有那麽多人用它来做 CGI?
Q1.5: 有没有教 CGI 或 Perl 的书或是线上资料?
Q1.6: 是不是有这方面的邮递论坛 (mailing lists) 或新闻讨论群组?
Q1.7: 网路上是不是有专门收藏邮递论坛或新闻讨论群组的 posts 的站?

2.0 - Modules (模组)

Q2.1: 我是不是该用 Perl CGI modules 来写 CGI scripts
?自己做不是比较容
易吗?
Q2.2: 如何知道某个 module 该怎麽个用法?
Q2.3: 有哪些 Perl4 的 CGI 或 WWW的 libraries ?
Q2.4: 有哪些给 Perl5 使用的 CGI modules?我该用哪个?为什麽?
Q2.5: 为什麽这麽多 perl CGI libraries 都是 object-oriented
(物件导向)
的?我对用物件导向来写程式一窍不通。难道就没有简单一点,给不会物
件导向的人使用的 libraries 吗?物件导向有多难?

3.0 - CGI 与 WWW Server

Q3.1: 我的 Perl CGI 程式要放在哪里执行?cgi-bin
这个目录是做甚麽用的?
Q3.2: 什麽是档案使用权限?怎样改?
Q3.3: Perl 应该安装在哪里才可以执行它?
Q3.4: 我为什麽一直得到 ``Server: Error 500'' 的讯息?
Q3.5: 我试著打开一个档案,想把资料储存在里头,但是 open() 的指令失败
了。到底是怎麽搞的?

4.0 -程式设计疑难杂症

Q4.1: 我想让 user 填的 form 资料自动寄给我,该怎麽做?有没有范例?
Q4.2: 刚才这个用 form 送信的 script 看起来有点难。为什麽不乾脆用
``mailto:URL'',这样 user 填入的资料就可以寄给我了?
Q4.3: 我要如何在 UNIX 以外的平台上做 Perl-CGI,譬如 Mac、MS-DOS、
Windows 及 NT?我的 Perl CGI 程式能不能在这些平台之间互相移植呢?
能不能很直接,没有麻烦?我在 UNIX 主机上有帐号,但是都是先在
Windows/Mac 上做。我要如何在我自己的机器上测试写好的 CGI scripts

Q4.4: 在 Perl CGI 程式中,STDERR (标准错误讯息)、STDIN
(标准输入),和
STDOUT (标准输出)各是连到何处?
Q4.5: 如何写计数器?
Q4.6: 要如何用一个 Perl 的取代指令将所有 HTML 标签从一份文件中删除?
Q4.7: 要如何知道是谁/哪台机器/哪个浏览器执行了我的程式?
Q4.8: 人家看得到我的 Perl CGI
程式吗?如果是这样的话,那不就让他们知道
我的程式是怎麽运作的了。这是个安全漏洞吗?我要怎麽把它隐藏起来?
Q4.9: 我需要将整个 Perl library 都复制到我的 htdocs 目录底下吗?
Q4.10:
我为什麽不该叫使用者输入他们的密码或身份证字号或信用卡号码?有一
个 TYPE="password" 不是就是拿来做这个的吗?
Q4.11: 我要如何产生专门替 Netscape
设计的网页,以别於世上其他的浏览器?
Q4.12: 为什麽我的 system() 所产生的资料输出顺序不对?
Q4.13: 我听说 Netscape 会支援 Java。这是不是说我现在得弃 Perl,改Java
了?是不是该这麽做?
Q4.14: 我要如何读取环境变数?为什麽它们有时候会不一样?
Q4.15: 为什麽我输出的资料被搅乱了(如 ``b < a'' 会被破坏掉)?
Q4.16: 为什麽我的Perl CGI 程式可以由指令列,却无法从浏览器去执行?
Q4.17: 为什麽我的 Perl CGI 程式能跑,但是不会把资料写到档案中?
Q4.18: 要如何做一个会维系状态,或允许【同一使用者】多次连线的 form?
Q4.19: 如果不从浏览器去执行我的 CGI 程式,要如何替它除错?
Q4.20: 如果不靠<FORM>标签,要如何叫出 Perl CGI 程式?
Q4.21: 要如何避免旁人不先填栏位就执行我的 form?他们为什麽一直不断这麽
做?
Q4.22: 那些 server 回应码 (server response codes)
是干什麽用的?有什麽意
义?
Q4.23: 为什麽 print "Location: http://host/page.html\n 不
work?又为什
麽它只 work 一次,但随後的转向就都弄错了呢?
Q4.24: 要如何让 server 在每个 HTML
网页的底部都自动加上一个:「最近更新
日期: ...」的告示?或者,是不是只有 SSI 的网页才能这麽做?CGI 程
式的日期要如何取得?
Q4.25: 什麽样的场合下以 Perl 写 CGI 程式会显得太小题大作,因为用 shell
就可以做到?而什麽样的场合对 Perl 来说又过於困难?用 C++ 做这类的
事不是好得多吗?那用 C 呢?

5.0 -安全

Q5.1: 以 Perl 写成的 CGI 程式是不是不如以 shell 或 C 写的来得安全?
Q5.2: 我该特别留意哪些安全事项?
Q5.3: 为什麽大家都说 http://bigidiot.abuse-me.com/perl.exe?foo.pl
这样
很危险?会有多糟?
Q5.4: 要如何在程式中安全地使用逆向撇号(backticks,"`")?这麽做:
@ans = `grep'$user_field' some.file`; 是不是真的不安全?
Q5.5: /$user_variable/ 这个句法是不是 Perl 5 中的一个安全漏洞?


---------------------------------------------------------------------------

1.0 -入门简介

---------------------------------------------------------------------------

Q1.1: 为什麽我的 HTML page/form 需要用 script?

因为有的时候您需要在 HTML
文件中使用动态资料(非固定不变的资料)。这包括了
日期和时间这类的简单资料,或是一个显示「您是第 xxx
位访客」的计数器。但它
也可能包括根据使用者输入而得出的大饼图/条统图、资料库搜寻产生的结果,或动
画等这类的东西。要做出像这样的东西,您唯一的方法是使用 CGI scripts
(尽管您
也可以应用客户端程式,如 Java 和 javascript
来达到这个目的,不过那又是完全
不同的一回事!)。

---------------------------------------------------------------------------

Q1.2: CGI 各代表什麽?

以下是我的编辑* Andy Oram (<http://jasper.ora.com/andyo> 和 Linda Mui
(<http://pcnt1.ora.com> (他们很棒!)所写的一段非常好的描述:

【译者】这是原文的第一作者 Shishir G. 指他所写的 CGI Programming
on the World Wide Web (<http://www.ora.com/info/cgi/> 一书的编
辑。

Common 向您确保 CGI 可以使用多种程式语言并和多种
不同的系统互动。它让您自由选择达到目的的方
法,不把您绑死在单独一种作法之下*。
Gateway 提示您 CGI 的力量不在於它本身所做的事,而
在於它提供了连结其他系统的潜力,例如资料库
和图形制造器。
Interface 只是表示 CGI 对如何善用其特性提供了明确的
界定-换句话说,您可以设计程式来适当利用这
个介面。

【译者】似乎有影射 Java 之意。

---------------------------------------------------------------------------

Q1.3: 到底什麽叫 script?我能拿它来能做什麽?

简单的说,script
就是程式!好吧、好吧,应该说二者有语意上的差别。如果您真
的想知道,那麽去买一本电脑程式设计的书来看

上一个:启示录1:丑陋的,坏的和好的 (上)
下一个:perl调试工具ptkdb简单介绍

更多图片编程知识:
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,